Jas*_*n S 3 java sockets nio exception-handling
我正在使用带有网络套接字的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)
...
Run Code Online (Sandbox Code Playgroud)
我需要区分这个预期会发生的异常和意外的异常,以便我可以记录/打印意外的异常并处理这个异常.但它只是一个普通的IOException,带有不同的文本消息,虽然我总是检查SocketChannel.isOpen()和SocketChannel.isConnected(),但在这种情况下它们似乎返回true,即使套接字的另一端已经关闭.
我能做什么/应该做什么?
isOpen()和isConnected()应该更准确地称为hasBeenOpenned()和hasBeenConnected().一旦它们成立,它们就不会回归虚假.
您可能必须执行e.getMessage().contains("由远程主机关闭").不幸的是,这很可能是依赖于平台的.
相反,我建议您允许协议发送某种类型的"已关闭"消息并处理任何异常,而不首先将其视为意外.
| 归档时间: |
|
| 查看次数: |
19914 次 |
| 最近记录: |