如何检测客户端何时与使用ServerSocket和Socket的服务器断开连接?
我有一个对象I / O流。当客户端断开连接时,我想服务器减少当前运行的连接并显示一条消息。这必须或多或少地在断开连接的确切时间发生。你怎么得到这个?
答案 0 :(得分:1)
如果您尝试阅读或写东西,那么您就会知道。通过执行read()来检测这个,它将返回-1(EOF)或引发SocketException(“连接重置”)。
答案 1 :(得分:1)
在这种情况下,当相应的读取操作返回-1(对于原始read()调用)或null(对于readLine()调用)或抛出EOFException
时,可以检测到流结束(对于所有其他readXXX()
次来电)。
在关闭的套接字上执行时,套接字方法将导致SocketException: socket closed
。这表示您的编程错误。
这个问题的另一个解决方案是在两个连接的实体之间定期交换心跳,大多数电信系统都使用这种方法来响应断开连接。