C 中Socket的運用

2021-05-23 13:35:48 字數 2698 閱讀 7807

原文**:http://hi.baidu.com/eleven%5f2020/blog/item/8217de2e8a8c093a359bf763.html

c#中socket的運用

2010-08-31 12:01

流的說明:資料的傳輸都會用到流,一般的檔案如文字、等,可以運用filestream類來完成。物件的傳輸也要轉換成流,只不過我們稱之為物件的序列化。所以不管是檔案還是記憶體中的物件,要實現傳輸都會轉換成有序列的二進位制陣列,然後在進行傳輸。

c#中可運用socket物件來完成計算機之間的資料傳輸。

傳送資料主機:

1、建立socket物件

socket   socketsend = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);

2、遠端ip和埠號

pendpoint remotepoint = new ipendpoint(ipaddress.parse(遠端ip), 8002);

3、連線遠端主機

socketsend.connect(remotepoint);

4、資訊轉換成位元組陣列

byte buff = system.text.encoding.default.getbytes(資訊));

5、傳送資料

socketsend.send(buff);

6、關閉socket

socketsend.close();

接送資料主機

1、建立socket物件

socket socketlisten = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);

2、本機ip和埠號

ipendpoint hostpoint = new ipendpoint(dns.gethostentry(dns.gethostname()).addresslist[0], 8002);

3、socket繫結到該結點上

socketlisten.bind(hostpoint);

4、讓socket物件處於監聽狀態

socketlisten.listen(50);

5、建立連線請求

while (true)

6、處理資料

public void dataprocess(object obj)

c#中socket的運用(二)

2010-08-31 14:38

在做socket程式設計時,我們一般會遇到以下問題:

1、如何判斷傳送方傳送的是文字資訊還是檔案

可以先傳送判斷型別的字串如:"msg"或"file",再傳送相關資訊,另一方接送到後先解析型別,在處理接收到的資訊。

傳送發:

socketsend.send(system.text.encoding.default.getbytes("msg"));

thread.sleep(100);//這裡一定要sleep一會,不然接收到的可能有後面傳送的資訊

socketsend.send(其他資訊);

接收方:

byte buff = new byte[1024];

int len =socket.receive(buff);//進行第一次receive,獲取型別字串,若傳送時沒有sleep一會,這裡可能接送到所有資訊,可通過擷取字串判斷。

string type= system.text.encoding.default.getstring(buff, 0, len);

if (type == "msg")

傳送檔案則是同樣的原理。

2、傳輸大資料的處理

在進行資料傳輸時,我們會去建立臨時的快取區域,用於資料的讀寫,當傳輸大資料時,只需迴圈完成讀寫操作。

例如:傳輸大量文字資訊

socketsend.send(system.text.encoding.default.getbytes(大量資訊));

接收方:

byte buff = new byte[1024];//建立快取區域

int mlen = 0;

stringbuilder sb = new stringbuilder();

while ((mlen = socket.receive(buff)) != 0)//迴圈讀取資料

fs.close();//傳送完關閉檔案流

thread.sleep(100);

string end = "end";//表示傳送完

socketsend.send(system.text.encoding.default.getbytes(end));

socketsend.close();

接收方:

//建立寫入檔案流

filestream fs = new filestream("d://" + filename, filemode.openorcreate, fileaccess.write);

int mlen = 0;

while ((mlen = socket.receive(buff)) != 0)//迴圈讀取

fs.write(buff, 0, mlen);//讀一次寫一次

}fs.close();

messagebox.show("檔案傳輸完成");

C 建立和運用socket鏈結池

系統採用的就是這種方式。使用者數量足夠多的時候,只須要動態新增鏈結池的數量即可。下面我們用具體的程式來講解下 首先我們宣告乙個socket類 public class xiegousocket 下面的函式是建立 socket鏈結池,這裡為了使 更加清晰,我特地把異常處理部分全部取掉了。public ...

C 中split的運用

1 public string split params char separator 2 public string split char separator,int count 3 public string split char separator,stringsplitoptions opt...

c 中operator的運用

operator 只要是運算子都能過載 operator 關鍵字的主要作用是用來過載運算子的,還可以用於類或結構中型別的自定義轉換。下面看個例子 csharp view plain copy class feige 過載加法運算子 public static feige operator feige...