程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#網絡編程(基本概念和操作) - Part.1(8)

C#網絡編程(基本概念和操作) - Part.1(8)

編輯:關於C語言

3.2 獲取多個客戶端連接

現在我們再接著考慮,如果有多個客戶端發動對服務器端的連接會怎麼樣,為了避免你將浏覽器向上 滾動,來查看上面的代碼,我將它拷貝了下來,我們先看下客戶端的關鍵代碼:

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);
}

如果服務端代碼不變,我們先運行服務端,再運行客戶端,那麼接下來會看到這樣的輸出:

// 服務端
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循環中就可以了:

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個客戶端的連接了。

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

本篇文章到此就結束了,接下來一篇我們來看看如何在服務端與客戶端之間收發數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved