我希望区分客户端套接字上的服务器连接关闭的异常,例如服务器套接字由于空闲超时而关闭,因为必须在客户端生成原因作为空闲超时异常。同样用于连接失败的连接失败异常等。请帮我解决这个问题。提前谢谢。
答案 0 :(得分:1)
最好的方法是服务器向您发送一条消息,说明它关闭连接的原因。服务器不会关闭默认情况下空闲的连接。
答案 1 :(得分:1)
如果服务器正确关闭套接字,则客户端只有一个可能的异常,而不是客户端必须捕获和弄清楚的一系列不同异常。只有一个EOS指示:read()返回-1,readLine()返回null,readXXX()为任何其他X抛出EOFException。
如果由于网络故障导致连接中断,则客户端可能会获得带有“连接重置”文本的IOException。如果连接保持不变但服务器没有发送数据且客户端有读取超时,则客户端将获得SocketTimeoutException。这些都不意味着服务器已关闭连接(尽管服务器可能导致连接重置,我不会在此处记录)。
如果您需要知道服务器关闭套接字的原因,则必须通过消息告诉您。