【问题标题】:About checking whether a client is disconnected from the Server Socket [duplicate]关于检查客户端是否与服务器套接字断开连接[重复]
【发布时间】:2015-05-14 07:54:31
【问题描述】:

来自(Java 网络编程第四版): 要判断套接字当前是否打开,您需要 检查isConnected() 是否返回真,isClosed() 是否返回假。举个例子:

boolean connected = socket.isConnected() && ! socket.isClosed();

我需要找到一种方法来尽快发现客户端已从服务器套接字断开连接。使用上述技巧,我尝试了以下方法:

    Socket socket = ...;
    while (socket.isConnected() && !socket.isClosed()) {
      // do something ...
      // here, the client is always connected   
     }
    // client is disconnected 

上述方法对我有用,但它总是正确的?它检测到所有情况?

【问题讨论】:

标签: java sockets socket.io


【解决方案1】:

根据应用程序,智能地捕获异常似乎是一个不错的解决方案。但是,要求是您实际上想要向客户端发送/执行某些操作。这两种方法的组合可能适合您的特定应用。你可以试试看: Java detect lost connection

【讨论】:

    【解决方案2】:

    这本书是错的,如果它真的是这么说的话。 isConnected() 与当前是否打开套接字无关。它告诉你它是否曾经连接过,这根本不是一回事。

    isOpen() 确实告诉您 socket 是否打开,但这并不能告诉您有关 连接状态的任何信息。 是否连接的测试是否仍然开放是:

    • read() 已返回 -1
    • readLine() 已返回 null
    • readXXX() 已为任何其他 X 抛出 EOFException

    ...都表明对端已经关闭了连接,或者

    • 任何读取或写入方法都抛出了带有文本“连接重置”的IOException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 2010-12-20
      相关资源
      最近更新 更多