作者godman362 (青)
看板NUU_CSIE
標題[筆記] C# Socket (2)
時間Sat May 30 15:31:02 2009
接著之前提到的Socket部份
Socket物件的連結準備方式大概如上面所寫
那接下來講一下Socket物件的
讀寫
通常
讀這個動作,是寫在Server端,也就是用於
接收
而
寫,則是在Client端,用於
傳送資料
先假設現在在處理Server端
那麼Server一般來說啟動之後,假設你沒有要回傳資料給Client的話
就是造成一個infinite loop一直做接收的動作
那大概的形式會變成這樣:
Socket Server =
new Socket(Internal, Stream, TCP);
Server.Bind(LocalHost);
Server.Listen(10);
Socket Client = Server.Accept();
while (true)
{
Byte[] Client_Data =
new Byte[256];
//Allocate Memory
Client.Recevice(Client_Data);
//Recevice Client Data
memset(Client_Data, 0, sizeof(Client_Data);
//Clear Memory
}
以上,會看到一個比較特殊的地方
Socket Client = Server.Accept();
為什麼要
另外弄一個物件出來給Server.Accept()?
你可以稍微注意看一下Accept的回傳值:
Socket型態
用簡單一點的角度來說
Accept是回傳一個來自遠端的
File Description
所謂File Description,以最基礎的觀點來看,他是一個被開啟的資料
流
重點在於那個「流」字,我沒有框錯。Stream,就是用來傳輸資料的用途
因此,Accept接收到一個可以傳輸資料的Stream,當然要開一個Socket去接收
另外Recevice有很多的
Overload,不知道Overload的
請自己去讀物件導向
當然,既然這個Stream已經建立起來
Server端自然也可以透過接收到的Stream送資料給Client端
如:
Client_Data = "SeptemHill Hello. ";
Client.Send(Client_Data);
但是很不幸的是,Client端並沒有接收的功能
因為
Client端沒有做Bind、
Listen、
Accept之類的工作
他
唯一做的,只有
Connect
所以這也是我個人在C#中寫網路程式時,不會去用的方法
但是這似乎是在Winsock中,唯一的一種Socket處理方式
既然我不用這種方式,那麼C#中必然有好的處理方式是我個人所愛好的
就是上篇所講得
TcpClient以及
TcpListener
以上,這篇先講完Socket
晚上,或是有空(可能明天了吧)再繼續
下次見。
--
要
感謝的人太多了,那就
謝天吧
要
改得程式碼太多了,那就
改天吧
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.118.46.81
1F:推 sct830:解釋得真好!! 05/30 18:07
2F:→ kage0213:個人意見,學生時期有機會用socket我覺得比較好 05/31 00:04
3F:→ kage0213:使用物件只是加速開發過程,本質上還是socket... 05/31 00:06
4F:→ kage0213:不過如果一直用c#倒是另當別論.... 05/31 00:08
5F:→ godman362:我瞭解k大的意思,因為在沒有C#的狀況下 05/31 07:07
6F:→ godman362:一切都只能用Socket處理,沒有其他辦法 05/31 07:07
7F:→ godman362:但是想說是在C#上面,所以我就沒打算強調Socket 05/31 07:08
8F:→ osanaosana:推... 05/31 14:48