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

Socket 編程與線程模型(四):無連接 Socket 多線程同步與面向連接 Socket 的 accept() 機制詳解

     編輯:關於.NET

無連接 Socket 多線程同步

  • 單一 Socket 可向多地址發送、從單一地址接收,極具彈性。
  • 多線程共享同一 Socket 讀寫時,必須處理同步/互斥,否則讀寫順序不可預期。
  • 理論上:一個端口號對應協議棧上一組緩衝區,端口號即緩衝區句柄。

面向連接 Socket 概覽

面向連接 Socket 面向連接 Socket 二

accept() 核心機制

  1. 服務端建立 Socket → bind() 本地地址 → listen() 指定請求隊列大小。
  2. 呼叫 accept():從隊列取出首個請求,**建立新 Socket** 服務該客戶端。
  3. 新 Socket 繼承監聽 Socket 的所有屬性 (含異步事件選擇)。
  4. 原監聽 Socket 回歸 listen() 繼續接受新請求。

通訊流程詳解 (圖解)

面向連接通訊過程 面向連接三

  • 服務端:socket1 綁定 sockaddr1 (接收) → listen → accept 產生 newSocket (同樣綁定 sockaddr1 接收,並關聯 ClientAddr1 發送)。
  • 客戶端:socket2 隱式綁定 ClientAddr1 (接收) → connect 關聯 sockaddr1 (發送)。
  • 雙方各自 Socket 擁有完整「接收地址 + 發送地址」即建立**全相關**通道。

關鍵洞見

不同客戶端對應不同 newSocket,雖共享同一接收地址 sockaddr1,但Socket 句柄不同,協議棧內部以句柄區分緩衝區,故資料不會混淆。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved