如何为套接字捕捉破损的管道?

How to catch broken pipe for sockets?

我已经使用套接字编写了一个 Java 客户端-服务器应用程序。我正在使用 ObjectOutputStreamwriteUnshared()ObjectInputStreamreadObject() 方法。

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

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

您可以参考 Javadoc,它建议为所有 I/O 相关的常见异常捕获 IOException。

或者你可以自己测试。

或者您可以通过 source code,这表明当使用 "block data" 模式时,只要没有足够的字节来构造完整的对象,序列化就会使用 EOFException。但是,这并不能捕获所有连接断开的情况。

综合考虑,我会推荐 IOException。