Java 如何接住破裂的管套?

Java 如何接住破裂的管套?,java,sockets,ioexception,eofexception,Java,Sockets,Ioexception,Eofexception,我已经使用套接字编写了一个Java客户机-服务器应用程序。我正在使用ObjectOutputStream的writeUnshared()方法和ObjectInputStream的readObject()方法 现在,我想检测连接何时中断以重新连接(例如Wifi信号丢失时)。目前,对于ObjectInputStream我正在捕获EOFEException,对于ObjectOutputStream我正在捕获IOException以检测管道是否损坏 这是正确的还是我应该为两个流捕获IOException

我已经使用套接字编写了一个Java客户机-服务器应用程序。我正在使用
ObjectOutputStream的
writeUnshared()
方法和
ObjectInputStream的
readObject()
方法

现在,我想检测连接何时中断以重新连接(例如Wifi信号丢失时)。目前,对于
ObjectInputStream
我正在捕获
EOFEException
,对于
ObjectOutputStream
我正在捕获
IOException
以检测管道是否损坏

这是正确的还是我应该为两个流捕获
IOException

您可以通过,它建议为所有常见的I/O相关异常捕获IOException

或者你可以自己测试

或者您可以使用,这表明当使用“块数据”模式时,只要没有足够的字节来构造完整对象,序列化就会使用EOFEException。然而,这并不能涵盖所有断开连接的情况


考虑到所有因素,我建议使用IOException。

您应该捕获两个流的
IOException
。只有当对等方关闭且结果传输成功时,您才会获得
EOFEException
。不是因为网络故障。除了
SocketTimeoutException
之外的所有
IOException
对连接都是致命的。