簡體   English   中英

如何獲得有關客戶端斷開連接的通知?

[英]How can I get notified of client disconnects?

ServerSocket serverSocket = new ServerSocket(portNumber)
Socket socket = serverSocket.accept();
try (
  BufferedReader in = new BufferedReader(
                    new InputStreamReader(
                        socket.getInputStream()));
) {
  while (in.readLine() != null) {
    //do something
  }
  System.out.println("reach me if you can");
  socket.close();
}

編寫服務器/客戶端軟件后,我嘗試實現一些功能以顯示當前連接數。 但是我意識到,當客戶端突然終止時,服務器永遠不會收到消息。 它只是一直在等待in.readLine() 我應該如何確保在斷開連接時創建的用於處理特定連接的Thread不處於運行狀態?

TCP的一個普遍問題是,連接一端的計算機可能會消失而沒有任何通知另一端的計算機。 機器不應該這樣做,但並不總是在機器的控制之下。 避免在這種情況下永遠等待數據和/或避免加載死連接的一種常見方法是采用超時。

普遍的問題比您描述的要大,但是您應該可以在嘗試讀取套接字之前,通過在套接字上調用setSoTimeout()解決特定的問題。 如果您的讀取嘗試阻塞的時間超過了您指定的時間,則套接字將引發異常。 此設置將在套接字的整個生命周期內保持不變(或直到您設置其他值為止),因此,您可以根據需要在接受連接后立即應用它。

但是請注意,足夠長的簡單客戶端不活動時間也會導致超時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM