C#服務(wù)端與客戶端通信詳解
C#服務(wù)端與客戶端通信之獲取多個客戶端連接的情況是如何處理的呢?讓我們來看看:
C#服務(wù)端與客戶端通信的問題:現(xiàn)在我們再接著考慮,如果有多個客戶端發(fā)動對服務(wù)器端的連接會怎么樣,為了避免你將瀏覽器向上滾動,來查看上面的代碼,我將它拷貝了下來,我們先看下客戶端的關(guān)鍵代碼:
C#服務(wù)端與客戶端通信實(shí)現(xiàn)實(shí)例:
- TcpClient client;
- for (int i = 0; i <=2; i++) {
- try {
- client = new TcpClient();
- client.Connect("localhost", 8500);
- // 與服務(wù)器連接
- } catch (Exception ex) {
- Console.WriteLine(ex.Message);
- return;
- }
- // 打印連接到的服務(wù)端信息
- Console.WriteLine(
- "Server Connected!{0} --> {1}",
- client.Client.LocalEndPoint,
- client.Client.RemoteEndPoint);
- }
C#服務(wù)端與客戶端通信問題:如果服務(wù)端代碼不變,我們先運(yùn)行服務(wù)端,再運(yùn)行客戶端,那么接下來會看到這樣的輸出:
- // 服務(wù)端
- 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小節(jié)“多個客戶端與服務(wù)端連接”中的處境:盡管有三個客戶端連接到了服務(wù)端,但是服務(wù)端程序只接收到了一個。這是因為服務(wù)端只調(diào)用了一次listener.AcceptTcpClient(),而它只對應(yīng)一個連往客戶端的Socket。但是操作系統(tǒng)是知道連接已經(jīng)建立了的,只是我們程序中沒有處理到,所以我們當(dāng)我們輸入“netstat -a”時,仍然會看到3對連接都已經(jīng)建立成功。
為了能夠接收到三個客戶端的連接,我們只要對服務(wù)端稍稍進(jìn)行一下修改,將AcceptTcpClient方法放入一個do/while循環(huán)中就可以了:
C#服務(wù)端與客戶端通信實(shí)現(xiàn)實(shí)例:
- Console.WriteLine("Start Listening ...");
- while (true) {
- // 獲取一個連接,同步方法
- TcpClient remoteClient =
- listener.AcceptTcpClient();
- // 打印連接到的客戶端信息
- Console.WriteLine("Client Connected!{0} <-- {1}",
- remoteClient.Client.LocalEndPoint,
- remoteClient.Client.RemoteEndPoint);
- }
這樣看上去是一個死循環(huán),但是并不會讓你的機(jī)器系統(tǒng)資源迅速耗盡。因為前面已經(jīng)說過了,AcceptTcpClient()再沒有收到客戶端的連接之前,是不會繼續(xù)執(zhí)行的,它的大部分時間都在等待。另外,服務(wù)端幾乎總是要保持在運(yùn)行狀態(tài),所以這樣做并無不可,還可以省去“按Q退出”那段代碼。此時再運(yùn)行代碼,會看到服務(wù)端可以收到3個客戶端的連接了。
C#服務(wù)端與客戶端通信實(shí)例運(yùn)行結(jié)果:
- 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
C#服務(wù)端與客戶端通信的基本情況就向你介紹到這里,希望對你了解和學(xué)習(xí)C#服務(wù)端與客戶端通信有所幫助。
【編輯推薦】