[英]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.