关于检查客户端是否与服务器套接字断开连接

时间:2015-05-14 07:54:31

标签: java sockets socket.io

来自( 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 

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

  • read()已返回-1
  • readLine()已返回null
  • readXXX()已针对任何其他X
  • 投放EOFException

...所有这些都表明对等方已关闭连接,或

  • 任何读取或写入方法都会使用“连接重置”文本抛出IOException