Java 尽管LAN电缆未插入,OutputStream不会引发IOException
我用Java建立了TCP连接。服务器每秒向客户端发送一条活动消息以检测断开的连接 但当我插入LAN电缆时,IOException会在23秒后立即抛出,而不是在尝试发送后立即抛出 我要发送的代码是这样的Java 尽管LAN电缆未插入,OutputStream不会引发IOException,java,sockets,tcp,ioexception,outputstream,Java,Sockets,Tcp,Ioexception,Outputstream,我用Java建立了TCP连接。服务器每秒向客户端发送一条活动消息以检测断开的连接 但当我插入LAN电缆时,IOException会在23秒后立即抛出,而不是在尝试发送后立即抛出 我要发送的代码是这样的 // out is an OutputStream try { out.write(String.format("%s\r\n", encryptedCommand).getBytes(Charset.forName("UTF-8"))); } catch (IOException e)
// out is an OutputStream
try {
out.write(String.format("%s\r\n", encryptedCommand).getBytes(Charset.forName("UTF-8")));
} catch (IOException e) {
fireConnectionClosed();
}
我很确定这已经起作用了,但现在它不再起作用了当TCP数据包无法通过时,TCP堆栈会重新发送数据包几次。这使得即使偶尔丢失数据包,连接也能保持正常。这可以防止在网络上出现最小的拥塞时连接中断的问题。您可以通过拔下网络插头5或10秒钟,然后重新插入来测试这一点-连接应该很好 但是,此功能还意味着TCP连接只有在重试几次后才会被识别为丢失