如何为套接字捕捉破损的管道?
How to catch broken pipe for sockets?
我已经使用套接字编写了一个 Java 客户端-服务器应用程序。我正在使用 ObjectOutputStream
的 writeUnshared()
和 ObjectInputStream
的 readObject()
方法。
现在我想检测连接何时断开以重新连接(例如,当 Wifi 信号丢失时)。目前,对于 ObjectInputStream
,我正在捕获 EOFException
,对于 ObjectOutputStream
,我正在捕获 IOException
以检测管道是否堵塞。
这是正确的还是我应该为两个流捕获 IOException
?
您可以参考 Javadoc,它建议为所有 I/O 相关的常见异常捕获 IOException。
或者你可以自己测试。
或者您可以通过 source code,这表明当使用 "block data" 模式时,只要没有足够的字节来构造完整的对象,序列化就会使用 EOFException。但是,这并不能捕获所有连接断开的情况。
综合考虑,我会推荐 IOException。
我已经使用套接字编写了一个 Java 客户端-服务器应用程序。我正在使用 ObjectOutputStream
的 writeUnshared()
和 ObjectInputStream
的 readObject()
方法。
现在我想检测连接何时断开以重新连接(例如,当 Wifi 信号丢失时)。目前,对于 ObjectInputStream
,我正在捕获 EOFException
,对于 ObjectOutputStream
,我正在捕获 IOException
以检测管道是否堵塞。
这是正确的还是我应该为两个流捕获 IOException
?
您可以参考 Javadoc,它建议为所有 I/O 相关的常见异常捕获 IOException。
或者你可以自己测试。
或者您可以通过 source code,这表明当使用 "block data" 模式时,只要没有足够的字节来构造完整的对象,序列化就会使用 EOFException。但是,这并不能捕获所有连接断开的情况。
综合考虑,我会推荐 IOException。