首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

ServerSocket 與 Socket 核心機制圖解

     編輯:Java 綜合教學

深入理解 Java 網絡編程基石:ServerSocket 與 Socket

在 Java 網絡編程中,ServerSocket 與 Socket 是實現 TCP 通信的兩大核心類。本文通過官方文檔截圖輔助,系統梳理它們的職責分工、生命週期與典型交互流程,幫助開發者建立清晰的網絡通信心智模型。

核心角色定位

  • ServerSocket(服務端監聽器):綁定本地端口,處於「監聽」狀態,專職接受客戶端連接請求。調用 accept() 會阻塞直到有新連接到來,然後返回一個新的 Socket 實例代表該連接。
  • Socket(雙向通信端點):封裝 TCP 連接的兩端(客戶端發起連接、服務端 accept() 產生)。提供 getInputStream()/getOutputStream() 進行全雙工數據交換。

典型交互時序

服務端                          客戶端
  │                               │
  ├─ new ServerSocket(port) ───►  │  (綁定端口,進入監聽)
  │                               │
  │        ◄───── new Socket(ip, port)  (發起三次握手)
  │                               │
  ├─ Socket s = accept() ───────►  │  (返回專用通信 Socket)
  │                               │
  ├─ s.getInputStream().read() ◄──┤  (阻塞讀取)
  │                               ├─ s.getOutputStream().write() (發送數據)
  │                               │
  └─ 關閉流與 Socket ◄───────────┘  (四次揮手斷開)

關鍵圖解說明

ServerSocket Socket 交互圖解

圖中展示了:
1. ServerSocket 綁定 IP:PORT 進入 LISTEN 狀態
2. 客戶端 Socket 發起 SYN,完成三次握手
3. accept() 返回新 Socket(本地端口相同,遠程 IP:PORT 不同)
4. 雙方通過各自 Socket 的輸入/輸出流進行應用層協議交互

進階注意點

  • 執行緒模型:生產環境通常採用「主線程 accept + 線程池處理每個 Socket」或 NIO 非阻塞模型,避免單線程阻塞導致併發能力受限。
  • 半關閉處理:調用 shutdownOutput() 發送 FIN,對端 read() 返回 -1,但仍可繼續發送數據,需協議層協商結束標記。
  • 超時設置:setSoTimeout(ms) 可防止 accept()/read() 無限期阻塞,提升健壯性。

掌握 ServerSocket/Socket 的本質是「文件描述符」與「內核緩衝區」的抽象,配合多線程或 NIO,即可構建高性能網絡服務。建議結合 netstat -an | grep PORT 觀察連接狀態變化,深化理解。

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