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