2015-05-14 95 views
1

断开从(的Java网络编程第四版): 判断一个套接字已打开,你需要 检查isConnected()返回true,isClosed()返回false。举一个例子:关于检查客户端是否从服务器套接字

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

我需要找到一种方法,尽快客户端从服务器断开连接的Socket发现。使用上述伎俩,我曾尝试以下:

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

上述方法对我的作品,但它始终是正确的?它检测到所有的情况?

+0

如果你在while循环中时发生了什么事,你会从服务器断开连接? – Lrrr

+0

不是'while(!socket.isClosed()&& socket.isConnected()){'better –

+0

检查这个http://stackoverflow.com/questions/969866/java-detect-lost-connection –

回答

0

根据应用情况,智能捕捉异常看起来是一个很好的解决方案。然而,这个要求是你实际上想要向客户发送/做些事情。可能这两种方法的组合适合您的特定应用。你可以试试看: Java detect lost connection

0

这本书是错误的,如果这就是它说的。 isConnected()与插座当前是否打开无关。它会告诉你它是否曾经连接过,哪一个都不是一回事。

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

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

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

  • 任何读取或写入方法都会抛出带有文本'连接重置'的IOException
相关问题