我们如何在客户端套接字上区分服务器套接字连接的exception?

我想区分客户端套接字上的服务器连接关闭的exception,例如服务器套接字由于空闲超时而关闭,因为必须在客户端生成原因作为空闲超时exception。 同样用于连接失败的连接失败exception等。 请帮我解决这个问题。 提前致谢。

如果服务器正确关闭套接字,则客户端只有一个可能的exception,而不是客户端必须捕获和弄清楚的一系列不同exception。 只有一个EOS指示:read()返回-1,readLine()返回null,readXXX()为任何其他X抛出EOFException。

如果由于网络故障导致连接断开,则客户端可能会获得带有“连接重置”文本的IOException。 如果连接保持不变但服务器没有发送数据且客户端有读取超时,则客户端将获得SocketTimeoutException。 这些都不意味着服务器已关闭连接(尽管服务器可能会导致连接重置,我不会在此处记录)。

如果您需要知道服务器关闭套接字的原因,则必须通过消息告诉您。

最好的方法是让服务器向您发送一条消息,说明它为何关闭连接。 默认情况下,服务器不会关闭已空闲的连接。