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

Socket 編程與線程模型(五):地址綁定機制、並發連接隊列與無連接協議的 connect() 行為

     編輯:關於.NET

Socket 地址綁定本質

Socket 地址結構

  • Socket 句柄 + 本地綁定地址 共同決定協議棧上的接收緩衝區 (Read Buffer)。
  • 發送緩衝區 (Write Buffer) 由同協議的所有 Socket 共用 (TCP/UDP 各自獨立)。
  • 同一地址,不同 Socket 可接收不同內容;但單一 Socket 對同一地址僅能綁定一次 (顯式/隱式皆算)。

並發連接與 Listen 隊列

  • 多客戶端同時 connect() → 服務端 listen() 指定隊列大小緩存未處理請求。
  • 被緩存的客戶端 connect() 正常返回,但後續 send/recv 會阻塞等待 accept()。
  • 隊列滿 → 新連接 connect() 可能返回錯誤,send/recv 直接失敗。
  • 對策:增大隊列 + 多線程服務 (主線程專責 accept,子線程處理業務)。

connect() 的雙重角色

面向連接 (TCP)

  • 發起三向交握,建立雙向通道。
  • 隱式綁定本地地址 (接收端),顯式關聯遠端地址 (發送端)。

無連接 (UDP)

  • 不發起網路交握。
  • 僅將預設發送地址 顯式綁定到 Socket,使後續 send/recv 可直接使用。
  • 仍可用 sendto() 指定非預設目標地址發送。

bind() 使用建議

  • bind() 為顯式綁定本地接收地址。
  • 客戶端不鼓勵顯式 bind,採用 connect()/sendto() 隱式綁定即可。
  • 若顯式綁定亦不報錯,但在多點對等模型中才有必要。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved