使用 Java Socket API 確定連接關閉
使用 Java 的套接字 API 時,檢測連接何時被切斷可能很困難。與 isConnected() 和 isClosed() 等僅指示本地套接字狀態的方法不同,沒有內建 API 來確定遠端套接字的狀態。
為了解決此限制,建議的方法包括監視I/O 操作。如果 read() 傳回 -1、readLine() 傳回 null 或 readXXX() 拋出 EOFException,則對等方可能已正常關閉連線。
在連線突然終止的情況下,嘗試write 可能會導致 IOException,指示「連線被對等方重設」。讀取操作也可能會因類似的異常而失敗。
或者,可以採用讀取超時來偵測對等方何時保持連線但不活動。
需要注意的是 ClosedChannelException 和 SocketException:套接字已關閉並不表示連接已關閉,而是在本地關閉通道後嘗試使用該通道。
在 Java 的特定場景中7 在 Windows XP 上,監視 SelectionKey 的有效性可以揭示連線重設。但是,在不同平台或 JRE 版本之間無法保證此行為。
以上是如何可靠地檢測 Java 中的遠端套接字關閉?的詳細內容。更多資訊請關注PHP中文網其他相關文章!