来自( Java网络编程第四版):
要知道套接字当前是否打开,您需要
检查isConnected()
是否返回true,isClosed()
返回false。举个例子:
boolean connected = socket.isConnected() && ! socket.isClosed();
我需要找到一种方法来尽快发现客户端已从服务器套接字断开连接。使用上述技巧,我尝试了以下内容:
Socket socket = ...;
while (socket.isConnected() && !socket.isClosed()) {
// do something ...
// here, the client is always connected
}
// client is disconnected
上述方法对我有用,但总是正确的吗?它检测到所有情况?
答案 0 :(得分:0)
根据应用程序的不同,智能捕获异常似乎是一个很好的解决方案。但是,要求是您实际上想要向客户发送/做某事。可能两种方法的组合适合您的特定应用。你可以试试看: Java detect lost connection
答案 1 :(得分:0)
这本书是错误的,如果它真的是这么说的话。 isConnected()
与套接字当前是否打开无关。它告诉你它是否曾经连接过,这根本不是一回事。
isOpen()
确实告诉您套接字是否已打开,但这并未告诉您有关连接状态的任何信息。是否测试连接仍然是开放的是否:
read()
已返回-1 readLine()
已返回null readXXX()
已针对任何其他X EOFException
...所有这些都表明对等方已关闭连接,或
IOException
。