【发布时间】:2011-01-27 20:23:56
【问题描述】:
ReadableByteChannel.read() 的规范将-1 显示为流结束的结果值。此外,如果线程被中断,它会指定ClosedByInterruptException作为可能的结果。
现在我想这就是全部了——而且大部分时间都是这样。但是,有时我会得到以下信息:
java.io.IOException: Eine vorhandene Verbindung wurde vom Remotehost geschlossen
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233)
at sun.nio.ch.IOUtil.read(IOUtil.java:206)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:236)
at ...
我不明白为什么在这种情况下我没有得到-1。这也不是一个干净的例外,因为如果不捕获任何可能的IOException,我就无法捕获它。
所以这是我的问题:
- 为什么首先抛出这个异常?
- 是否可以安全地假设 read 引发的任何异常都与套接字关闭有关?
-
write()的所有这些都一样吗?
顺便说一句:如果我打电话给SocketChannel.close(),我是否也必须打电话给SocketChannel.socket().close(),还是前面的暗示暗示了这一点?
谢谢,史蒂芬
【问题讨论】:
-
从谷歌翻译的异常翻译:“一个现有的连接被远程主机强行关闭”
-
@Steffen:我已经尝试回答您的一些问题。希望它会有所帮助。
标签: java sockets exception nio