2012-10-15 63 views
1

我有一个线程每5秒写入一个TCP套接字,连接到远程TCP端口(使用Java .net套接字,而不是NIO)。为了您的信息,我没有在套接字层上配置任何超时(S0,..),它具有默认值。如果连接到远程TCP端口 的网络电缆被移除,我的Java线程没有得到任何IO异常,而是一直写入套接字。网络断开连接不会在Java中抛出IOException

有人可以指导我为什么我没有得到这些例外?我想写入方法应该通过IOException尝试每5秒写入套接字。

问候,Rajib

回答

1

这全靠了多少你写的插座,如果你不regurarly刷新。如果每5秒只写入几个字节,则缓冲区可能需要相当多的时间来自动填充和刷新。最终会出现例外。如果你使用flush,那么你可能会看到另一个网络管道,比如WiFi,而传输只是故障转移到那个网络管道。

+0

请问Java做一些内部缓冲?操作系统肯定不会将其排队几秒钟 –

+0

是的,Java中可能会有内部缓冲而不受超时限制。这取决于输出管道的配置方式(使用哪种包装)。 –

+0

@Marko - 我的代码snipet - public void writeLine(String line)throws IOException {writer.write(line); writer.flush(); } - 我期待如果网络电缆断开IOException。 –

相关问题