首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 網路程式設計基礎 (8/8):同步伺服器處理多用戶端連線

     編輯:關於C語言

問題:單一 Accept 只能收一個連線

伺服器若只呼叫一次 listener.AcceptTcpClient(),僅能接受第一個用戶端;後續連線雖在 OS 層建立 (netstat 顯示 ESTABLISHED),但程式碼未處理。

解決:迴圈持續 Accept

Console.WriteLine("Start Listening ...");
while (true)
{
    TcpClient client = listener.AcceptTcpClient(); // 同步阻塞,直到有連線
    Console.WriteLine("Client Connected! {0} <-- {1}",
        client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
    // 實務上這裡應啟動新執行緒/Task 處理該 client,避免阻塞主迴圈
}

測試結果

// Server
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

// Client (迴圈連 3 次)
Client Running ...
Server Connected! 127.0.0.1:5305 --> 127.0.0.1:8500
Server Connected! 127.0.0.1:5306 --> 127.0.0.1:8500
Server Connected! 127.0.0.1:5307 --> 127.0.0.1:8500

下一步:資料收發

本系列同步基礎篇結束。下一階段將介紹:

  • 同步收發字串 (簡單請求/回應)
  • 多執行緒處理多用戶端並發
  • 非同步 Socket (BeginAccept/BeginReceive) 高擴展性模型
  • 檔案傳輸、聊天室綜合實作
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved