.Net Socket通訊可以使用Socket類,也可以使用 TcpClient、 TcpListener 和 UdpClient類。我這裡使用的是Socket類,Tcp協議。
程序很簡單,一個命令行的服務端,一個命令行的客戶端。服務端啟動後根據輸入的端口號綁定本機端口並啟動偵聽,客戶端啟動後根據輸入的客戶端數量、服務IP、服務端口號連接服務端。客戶端連接成功後啟動新線程隨機發送消息到服務端並等待接收服務端返回的消息,服務端和客戶端成功創建連接後啟動新線程接收客戶端消息並返回客戶端一個消息,如此循環下去……
上圖:
服務端關鍵代碼
啟動偵聽:
endPoint = IPEndPoint( socket = socket.Listen(.MaxValue);
啟動新線程接收客戶端連接:
socketThread = Thread(OnSocketAccept) {IsBackground = Show();
接收客戶端連接細節:
OnSocketAccept( socket = obj ( Socket clientSocket = (! ClientDict[key] = }
發送/接收數據:
OnSendOrReceive( socket = obj ( receiveLength = sendLength = }
關閉連接:
socket.Disconnect( }
客戶端關鍵代碼
連接服務端:
( i = ; i <= clientNum; i++ ConnetServer(IPAddress address, port, clientSocket =
發送/接收數據、關閉連接代碼同服務端一樣。
優先使用線程池線程,服務端接受客戶端連接使用獨立線程(socketThread)是考慮到可能需要手工停止該線程。
使用 Monitor.TryEnter(ClientDictLock, LockTimeOut) 和 Monitor.Exit(ClientDictLock); 是考慮到 lock 可能形成死鎖,使用lock需要注意。
本人才疏學淺,歡迎大家批評指正!
源代碼下載