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

Java ServerSocket 建立全攻略:四種建構子、請求佇列長度、IP 綁定與 bind() 靈活配置

     編輯:Java 相關知識

前言

ServerSocket 提供四種建構子與 bind() 方法,支援端口綁定、請求佇列長度設定、指定 IP 綁定。本文詳細解析各參數意義、掃描端口實作、佇列滿載行為、多網卡 IP 綁定策略,並說明 bind() 在選項設定上的優勢。

一、四種建構子

ServerSocket()
ServerSocket(int port)
ServerSocket(int port, int backlog)
ServerSocket(int port, int backlog, InetAddress bindAddr)
  • port:0 表系統隨機分配匿名端口;1~1023 為系統保留(Linux 需 root)。
  • backlog:請求佇列長度(預設通常 50);≤0 或 >OS 上限則採 OS 預設。
  • bindAddr:指定綁定 IP,限制僅接受該介面連接。

二、常用靜態方法:toString() 輸出資訊

ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=1320]
  • addr:綁定 IP(0.0.0.0 表所有介面)。
  • port:固定為 0(歷史遺留)。
  • localport:實際綁定端口。

三、掃描本機開放端口

嘗試綁定端口,捕捉 BindException 判斷端口佔用:

for (int port = min; port <= max; port++)
    try { new ServerSocket(port).close(); }
    catch (BindException e) { System.err.println("端口 " + port + " 已開放!"); }

四、請求佇列機制與滿載測試

  • OS 為每個綁定端口分配 FIFO 佇列,accept() 從中取出連接。
  • 佇列滿時新連接被拒,客戶端拋 SocketException: Connection reset by peer。
  • 測試:new ServerSocket(1234, 2) 設佇列長度 2,客戶端快速建立 10 連接,前 2 成功,第 3 失敗;按 Enter 讓伺服器 accept() 釋放佇列位置。

五、綁定指定 IP(多網卡場景)

new ServerSocket(1234, 0, InetAddress.getByName("192.168.18.10"));

僅監聽內網介面,外網無法訪問,提升安全性。

六、bind() 方法:更靈活的配置順序

ServerSocket ss = new ServerSocket();
ss.setReuseAddress(true); // 必須在 bind 前設定選項
ss.bind(new InetSocketAddress(1234)); // 或 bind(addr, backlog)
  • 建構子綁定後無法設定選項(如 SO_REUSEADDR)。
  • bind() 允許「建立 → 設定選項 → 綁定」順序,支援 IP+端口+backlog 任意組合。

結語

根據部署環境(單/多網卡、高併發、安全需求)選擇建構子或 bind(),正確設定 backlog 避免連接丟失,善用選項微調行為,是穩健伺服器開發的關鍵。

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