gpt4 book ai didi

java - 检查套接字是否仍然打开

转载 作者:行者123 更新时间:2023-12-01 23:03:33 25 4
gpt4 key购买 nike

我使用 Java Knock Knock 教程来创建客户端-服务器连接,但我不知道如何检查套接字是否仍然打开。

简化代码:

try {
while ((clientMessage = inFromClient.readLine()) != null) {
//do stuff
} catch (IOException e) {
//client disconnected
e.printStackTrace();
}
}

这很好用,但是我注意到,当客户端基于 Linux 时,如果客户端被强制关闭,则不会抛出异常。我尝试了其他人发布的一些建议,但无法发挥任何作用。我尝试实现一个循环来检查自收到最后一条消息以来已经过去了多长时间,但它不起作用,该循环必须位于上面代码中的循环内部,并且仅当从 接收到新消息时才执行该循环客户端。我很困惑,但我不明白如何实现任何检查方法。

如果我将方法放在上述循环之外检查不活动状态,那么它永远不会被调用,因为套接字循环是不确定的(除非套接字已关闭)。

最佳答案

只需使用Socket.setSoTimeout()设置读取超时。将其设置为高于预期的请求间隔,例如两倍。如果过期,您将收到SocketTimeoutException:关闭套接字。

与某些注释相反,isConnected()isBound()isClosed()、 等对此没有用。它们告诉您是否连接、绑定(bind)、关闭了Socket。而不是连接的状态。

关于java - 检查套接字是否仍然打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23167985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com