當前位置:成語大全網 - 書法字典 - 如何通過套接字傳輸xml

如何通過套接字傳輸xml

套接字文件傳輸

私有字符串path =“F:\ \ smart movie。EXE“;//要發送的文件

私有套接字s;

私有void listen()

{

string IP =“127 . 0 . 0 . 1“;//遠程IP在這裏定義為自己的機器。

IP address【】ih = Dns。GetHostAddresses(IP);//獲取IP列表

IP address newip = ih【0】;//獲取IP地址

int port = 6789//定義端口

IPEndPoint conn cet = new IPEndPoint(newip,port);//構造節點

s =新套接字(地址系列。互聯網,SocketType。協議類型的流。TCP);//初始化套接字

嘗試

{

南連接;//連接到遠程服務器

if(s . Connected)//如果連接成功則為真,否則為假。

{

控制臺。WriteLine(“連接成功“);

Thread t =新線程(new ThreadStart(set));//創建流程

t.start();//開始進程

控制臺。WriteLine(“發送完成”)

}

}

catch(NullReferenceException e)

{

控制臺。WriteLine(“{ 0 }”,e);

}

private void set()//創建壹個set函數。

{

控制臺。WriteLine(“開始發送數據“);

byte【】b =新字節【1000000】;//創建壹個文件緩沖區,其中可以考慮文件的最大值。

FileStream file =文件。打開(路徑,文件模式。打開文件訪問。閱讀);//創建文件流

int start = 0;

int end =(int)文件長度;//獲取文件長度文件傳輸如果需要超出int的範圍,估計會重寫FileStream類。

嘗試

{

while(end!= 0)

{

int count = file。read(b,開始,結束);//將數據寫入流中

start+= count;

end -=計數;

}

while(開始!= 0)

{

int n = s . Send(b,end,start,SocketFlags。無);//用Socket的Send方法發送流。

end+= n;

start-= n;

}

文件。close();//關閉文件流

南close();//關閉套接字

}

catch(NullReferenceException e)

{

控制臺。WriteLine(“{ 0 }”,e);

}

}

這樣就實現了文件發送的模型。

接下來,要接收文件,我們必須首先確定對方發送的文件的長度。實際上,發送文件長度的功能應該添加到上面的段落中。實現非常簡單,即發送int變量end,然後要求接收代碼返回壹個布爾值來確定是否發送它。在這裏,為了使它更清楚,原則沒有實現。

私有void get()

{

string path =“G:\ da . exe“;//接收的文件

FileStream file =新的FileStream(路徑,文件模式。OpenOrCreate,FileAccess。寫);//寫入文件流

TcpListener listener = new TcpListener(6789);//監聽端口

套接字s1 =新套接字(AddressFamily。互聯網,SocketType。協議類型的流。TCP);//定義套接字並初始化它。

嘗試

{

聽著。start();//開始聆聽

s1 =聽。accept socket();//獲取套接字連接

byte【】data =新字節【1000000】;//定義緩沖區

int longer = data。長度;

int start = 0;

int mid = 0;

if(s 1。已連接)//確認連接。

{

控制臺。WriteLine(“連接成功“);

int count = s1。接收(數據,開始,較長,套接字標誌。無);//將接收到的字節存儲在緩沖區中。

mid+= count;

longer-= mid;

while(數數!= 0)

{

計數= s1。接收(數據、mid、longer、SocketFlags。無);

mid+= count;

longer-= mid;

}

文件。write(data,0,1214134);//寫入文件,1214134為文件大小,通過socket發送即可獲取。代碼之前已經解釋過了。

s1。close();

文件。close();

}

}

catch(NullReferenceException e)

{

控制臺。WriteLine(“{ 0 }”,e);

}

}