检测客户端何时断开与服务器的连接

时间:2013-05-25 12:51:33

标签: java sockets java-io

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

我有一个对象I / O流。当客户端断开连接时,我想服务器减少当前运行的连接并显示一条消息。这必须或多或少地在断开连接的确切时间发生。你怎么得到这个?

2 个答案:

答案 0 :(得分:1)

如果您尝试阅读或写东西,那么您就会知道。通过执行read()来检测这个,它将返回-1(EOF)或引发SocketException(“连接重置”)。

答案 1 :(得分:1)

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

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

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