【问题标题】:Checking if socket is still open检查套接字是否仍然打开
【发布时间】: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 时,如果客户端被强制关闭,则不会引发异常。我尝试了其他人发布的一些建议,但无法正常工作。我试图实现一个循环来检查它自收到最后一条消息以来已经过了多长时间但它没有工作,循环必须在上面代码中的循环内,并且只有在收到新消息时才会执行循环客户端。我很困惑,但我不明白如何实现任何检查方法。

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

【问题讨论】:

标签: java sockets


【解决方案1】:

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

与某些 cmets 不同,isConnected()isBound()isClosed(), 等对此毫无用处。它们告诉你是否连接、绑定、关闭了Socket。而不是连接的状态。

【讨论】:

    猜你喜欢
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2013-04-13
    • 2015-12-01
    相关资源
    最近更新 更多