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

Java Socket 程式設計(三)-2:ServerSocket 進階參數與阻塞機制深度解析

     編輯:Java 相關知識

ServerSocket 建構子參數詳解

// 完整建構子
ServerSocket(int port, int backlog, InetAddress bindAddr)
參數說明預設值
port監聽埠號,0 表由 OS 自動分配必填
backlog等待佇列最大長度(作業系統提示值)50
bindAddr綁定特定網卡 IP,null 表所有介面null (0.0.0.0)

accept() 阻塞機制

accept() 為阻塞式呼叫:

  • 佇列有連線 → 立即回傳新 Socket
  • 佇列為空 → 執行緒進入 WAITING 狀態
  • 被中斷 → 拋出 InterruptedIOException
  • Socket 關閉 → 拋出 SocketException

連線處理標準流程

  1. ServerSocket.accept() 取得客戶端 Socket
  2. 建立 InputStream/OutputStream
  3. 依協定讀寫資料
  4. 關閉客戶端 Socket(在 finally 區塊)
  5. 迴圈回步驟 1

單執行緒限制與解決方案

迭代式伺服器若處理耗時請求,後續客戶端將排隊等待。解決方案:

  • 執行緒池:ExecutorService 管理工作執行緒
  • NIO 非阻塞:單執行緒多路複用
  • 虛擬執行緒:Java 21+ Thread.ofVirtual()

優雅關閉模式

volatile boolean running = true;

Runtime.getRuntime().addShutdownHook(new Thread(() -> {
    running = false;
    try { serverSocket.close(); } catch (IOException ignored) {}
}));

while (running) {
    try {
        Socket client = serverSocket.accept();
        executor.submit(() -> handle(client));
    } catch (SocketException e) {
        if (!running) break;
        throw e;
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved