【发布时间】:2014-04-19 08:56:25
【问题描述】:
我使用 Java Knock Knock 教程来创建客户端-服务器连接,但我不知道如何检查套接字是否仍然打开。
简化代码:
try {
while ((clientMessage = inFromClient.readLine()) != null) {
//do stuff
} catch (IOException e) {
//client disconnected
e.printStackTrace();
}
}
这很好用,但是我注意到当客户端是基于 Linux 时,如果客户端被强制关闭,则不会引发异常。我尝试了其他人发布的一些建议,但无法正常工作。我试图实现一个循环来检查它自收到最后一条消息以来已经过了多长时间但它没有工作,循环必须在上面代码中的循环内,并且只有在收到新消息时才会执行循环客户端。我很困惑,但我不明白如何实现任何检查方法。
如果我将检查不活动的方法放在上述循环之外,那么它永远不会被调用,因为套接字循环是不确定的(除非套接字关闭)。
【问题讨论】:
-
实际上我读到即使套接字关闭,它仍然会返回 true。但更大的问题是我不能循环调用它。我的代码中的循环仅在收到消息时被调用,如果我将它添加到代码中,那么它只会被调用一次(在收到消息之后),就是这样。编辑:这不是重复的,请阅读问题。问题不是检测 IF ITS CLOSED 的方法,问题是让方法继续检查不止一次。
-
@try-catch-finally,错了,
isClosed()只会告诉你,如果你做了关闭而不是相反。恕我直言,他应该使用readLine或read并检查响应。