虽然没有插入LAN电缆,但OutputStream不会抛出IOException

时间:2014-05-12 11:08:58

标签: java sockets tcp ioexception outputstream

我与Java建立了TCP连接。服务器每秒向客户端发送一次" ALIVE" -Message以检测断开的连接。

但是当我插入LAN-cable时,IOException将在23秒后完全抛出,而不是在发送尝试之后立即抛出。

我发送的代码就像那样

// out is an OutputStream
try {
    out.write(String.format("%s\r\n", encryptedCommand).getBytes(Charset.forName("UTF-8")));
} catch (IOException e) {
    fireConnectionClosed();
}

我很确定这已经有效了,但现在它已经没有了

1 个答案:

答案 0 :(得分:0)

当TCP数据包无法通过时,TCP堆栈会重新发送数据包几次。即使偶尔丢失数据包,这也可以使连接保持正常。这可以防止在网络拥塞最少时连接丢失的问题。您可以通过拔下网络5或10秒,然后重新插入网络来测试这一点 - 连接应该没问题。

但是,此功能还意味着TCP连接在重试几次后才会被识别为丢失。