您好,登錄后才能下訂單哦!
C#中怎么實現服務端與客戶端通信,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
C#服務端與客戶端通信實現實例:
TcpClient client; for (int i = 0; i <=2; i++) { try { client = new TcpClient(); client.Connect("localhost", 8500); // 與服務器連接 } catch (Exception ex) { Console.WriteLine(ex.Message); return; } // 打印連接到的服務端信息 Console.WriteLine( "Server Connected!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint); }
C#服務端與客戶端通信問題:如果服務端代碼不變,我們先運行服務端,再運行客戶端,那么接下來會看到這樣的輸出:
// 服務端 Server is running ... Start Listening ... Client Connected!127.0.0.1:8500 <-- 127.0.0.1:5226 // 客戶端 Client Running ... Server Connected!127.0.0.1:5226 --> 127.0.0.1:8500 Server Connected!127.0.0.1:5227 --> 127.0.0.1:8500 Server Connected!127.0.0.1:5228 --> 127.0.0.1:8500
就又回到了本章第2.2小節“多個客戶端與服務端連接”中的處境:盡管有三個客戶端連接到了服務端,但是服務端程序只接收到了一個。這是因為服務端只調用了一次listener.AcceptTcpClient(),而它只對應一個連往客戶端的Socket。但是操作系統是知道連接已經建立了的,只是我們程序中沒有處理到,所以我們當我們輸入“netstat -a”時,仍然會看到3對連接都已經建立成功。
為了能夠接收到三個客戶端的連接,我們只要對服務端稍稍進行一下修改,將AcceptTcpClient方法放入一個do/while循環中就可以了:
C#服務端與客戶端通信實現實例:
Console.WriteLine("Start Listening ..."); while (true) { // 獲取一個連接,同步方法 TcpClient remoteClient = listener.AcceptTcpClient(); // 打印連接到的客戶端信息 Console.WriteLine("Client Connected!{0} <-- {1}", remoteClient.Client.LocalEndPoint, remoteClient.Client.RemoteEndPoint); }
這樣看上去是一個死循環,但是并不會讓你的機器系統資源迅速耗盡。因為前面已經說過了,AcceptTcpClient()再沒有收到客戶端的連接之前,是不會繼續執行的,它的大部分時間都在等待。另外,服務端幾乎總是要保持在運行狀態,所以這樣做并無不可,還可以省去“按Q退出”那段代碼。此時再運行代碼,會看到服務端可以收到3個客戶端的連接了。
C#服務端與客戶端通信實例運行結果:
Server is running ... Start Listening ... Client Connected!127.0.0.1:8500 <-- 127.0.0.1:5305 Client Connected!127.0.0.1:8500 <-- 127.0.0.1:5306 Client Connected!127.0.0.1:8500 <-- 127.0.0.1:5307
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。