Socket 簡單通信事例 (C#版)
Socket 在網絡通信上是很常用的類型,在本文中只做事例,並不解析原理,如果想了解原理自行到搜索引擎中查找。
MSDN 文檔: http://msdn.microsoft.com/zh-cn/library/vstudio/system.net.sockets.socket.aspx
在Socket 通信是由服務端和客戶端形成,可以有多個服務端或者多個客戶端組成。
本文爲了讓一些初學者瞭解Socket通訊基礎用法而寫的。
在Socket通訊中主要使用的類有IPEndPoint 和Socket 類,它們是在System.Net 和 System.Net.Sockets命名空間裏面。
服務端使用方法:
第一步:創建預設端口如使用本機的9050端口用來通訊
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);//本機預使用的IP和端口
第二步:實例Socket容器,這裏使用的是IPv4協議的TCP通訊
Socket _Socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
第三步:綁定監聽端口
_Socket.Bind(ipep);//綁定
設置監聽列隊長度
_Socket.Listen(int.MaxValue);//監聽列隊長度
服務端啓動完成
第四步:監聽新客戶連接,調用_Socket.Accept(); 方法等待獲取到一個用戶連接返回該連接通訊的容器Socket 的引用。可以再重複調用該方法獲取更多的用戶連接
Socket client =_Socket.Accept();//當有可用的客戶端連接嘗試時執行,並返回一個新的socket,用於與客戶端之間的通信
獲取用戶通訊地址可以通過client.RemoteEndPoint 來獲取
IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;//獲取用戶IP地址信息和通訊端口
string ip =clientip.Address.ToString();int port = clientip.Port;
第五步:發送信息給已連接的用戶
client.Send(data);
第六步:等待接收已連接用戶的信息,返回該信息的長度,參數要求一個byte[] 容器這裏事例定義了長度爲1024
byte[] data =newbyte[1024];
int recv =client.Receive(data);
如果返回長度0就是說明用戶斷開連接
第七步:斷開和關閉服務端
如果有客戶端連接首先把所有的客戶端連接斷開關閉方法client.Close();
最後才關閉服務端連接 _Socket.Close();
客戶端使用方法:
第一步:創建連接端口信息
IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd),port);//服務器的IP和端口
第二步:創建連接容器Socket 的實例
Socket newclient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
第三部:使用容器連接到服務器
newclient.Connect(ie);
因爲這裏是客戶端所以不用監聽端口
第四步:接收發送信息到服務器
接收信息方法 int recv =newclient.Receive(data);
發送信息方法 client.Send(data);
該方法和服務端一樣的使用方式
第五步:客戶端斷開和關閉連接
newclient.Shutdown(SocketShutdown.Both);
newclient.Close();
事例下載地址 http://download.csdn.net/detail/pc_286/5892169
文件說明
服務端SocketServerApp.rar
客戶端SocketClient.rar
包含兩套事例
第一套是控制檯模式的一個客戶端通訊事例,相關項目是服務端DemoServer,客戶端SocketClient
第二套是WPF界面的模式支持多個客戶端通訊,使用Socket 結合多線程的事例
服務端 SocketServerApp
客戶端 SocketClientApp