需要使用到的命名空間有:
System.Net,System.Net.Sockets,System.Threading
l 服務器端
在服務器端,要單獨用一個線程和套接字來監聽客戶端的連接請求
首先,準備一個要綁定的本地終結點
IPAddress address = null;
IPAddress.TryParse(本地的IP地址, out address);
IPEndPoint ep = new IPEndPoint(address, 要綁定的端口);
然後創建一個用來監聽的套接字
Socket socWatcher = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
在創建套接字的三個參數中:
AddressFamily.InterNetword表示此Socket將採用的尋址協議
SocketType.Stream表示此Socket的類型,SocketType.Stream支持可靠、雙向、基於連接的字節流,而不重複數據,也不保留邊界。
ProtocolType.Tcp表示此Socket支持的協議爲TCP協議
socWatcher.Bind(ep);//將此套接字綁定到指定的終結點
socWatcher.Listen(10);//將此套接字置於偵聽狀態,並設置最多同時處理的請求數爲10
接着,開啓一個單獨的線程
Thread thrWatcher = new Thread(Watch);
thrWatcher.IsBackground = true;
thrWatcher.Start();
Watch方法用來用來監聽來自客戶端的請求
此方法中使用一個死循環來不斷爲請求創建套接字
while(true)
{
Socket socNew = socWatcher.Accept();
//處理socNew的代碼
//一般講socNew存儲到一個集合中,並新建立一個線程,利用此套接字與客戶端通信
}
Accept 以同步方式從偵聽套接字的連接請求隊列中提取第一個掛起的連接請求,然後創建並返回新的 Socket。
socNew建立起來後,可以利用此套接字與客戶端進行通信
大部分的時候,利用一個新的線程使用socNew監聽來自對方的信息。
socNew.Receive(字節數組,起始索引,長度,SocketFlags.None);
此方法將阻塞線程,直到接受完數據爲止。
同時也可利用socNew.Send(字節數組, 起始索引, 長度, SocketFlags.None);向對方發送數據。
l 客戶端:
客戶端必須知道服務器端的IP地址和端口號。
和服務器端類似,首先利用此IP地址和端口號創建一個終結點,然後創建一個套接字。
然後,利用此套接字向服務器端請求建立連接:
SocClient.Connect(ep);
連接建立完畢後,客戶端同樣可以使用此套接字的Send方法和Receive方法進行通信了。