我正在使用一个SocketChannel与网络套接字进行通信,并且需要处理对端意外关闭通道的异常。
问题是,我会收到这个IOException:
java.io.IOException: An existing connection was forcibly closed by the remote host
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(Unknown Source)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.read(Unknown Source)
at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
...
我需要区分这个异常,这是预期会发生的,和意外的异常,以便我可以记录/打印意外的异常并处理这个异常。但这只是一个普通的IOException,具有不同的文本消息,并且尽管我始终检查SocketChannel.isOpen()和SocketChannel.isConnected(),但在这种情况下它们似乎返回true,即使套接字的另一端已关闭。
我该怎么做?