Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当客户端与服务器断开连接时检测_Java_Sockets_Java Io - Fatal编程技术网

Java 当客户端与服务器断开连接时检测

Java 当客户端与服务器断开连接时检测,java,sockets,java-io,Java,Sockets,Java Io,如何检测客户端何时从使用ServerSocket和Socket的服务器断开连接 我有一个对象I/O流。当客户端断开连接时,我希望服务器减少当前正在运行的连接并显示一条消息。这必须或多或少在断开连接的准确时间发生。你是如何做到这一点的?如果你试图读或写一些东西,你就会知道。通过执行read()来检测这一点,read()将返回-1(EOF)或引发SocketException(“连接重置”)。在这种情况下,当相应的read操作返回-1(对于原始read()调用)或null(对于readLine()调

如何检测客户端何时从使用ServerSocket和Socket的服务器断开连接


我有一个对象I/O流。当客户端断开连接时,我希望服务器减少当前正在运行的连接并显示一条消息。这必须或多或少在断开连接的准确时间发生。你是如何做到这一点的?

如果你试图读或写一些东西,你就会知道。通过执行read()来检测这一点,read()将返回-1(EOF)或引发SocketException(“连接重置”)。

在这种情况下,当相应的read操作返回-1(对于原始read()调用)或null(对于readLine()调用)或抛出
EOFEException
(对于所有其他
readXXX()调用)时,可以检测流的结束
calls)

在关闭的套接字上执行套接字方法时,将导致
SocketException:socketclosed
。这表明您有编程错误


这个问题还有一个解决方案,就是在两个连接的实体之间定期交换心跳信号,大多数电信系统都使用这种方法来响应断开连接。

完全不正确。当对等机断开连接时,isConnected()不会更改状态。这不是它的目的。它会告诉您是否连接过此插座。它不会告诉您连接的状态。这同样适用于isBound()和isClosed()。它们告诉您本地套接字状态,而不是连接状态-1@EJP,在你的评论之后,我做了更多的研究,不知道你是对的,所以更新我的答案。谢谢你更新我的知识库为你做了更多的修改。我不确定这种“更新我的知识库”的东西。语句总是不正确,它不是新的。如果是readLine(),则返回null;如果是readObject()、readInt()、readUTF()等,则抛出EOFEException。它不能在“或多或少的断开连接的准确时间”发生。只有当您从连接读取数据并检测到流结束时,才会发生这种情况。如果你不读书,你就不会发现它。如果读取被其他处理延迟,您将在延迟后检测到它。