gpt4 book ai didi

java - 在断开连接的套接字上写入不会抛出

转载 作者:可可西里 更新时间:2023-11-01 02:32:05 24 4
gpt4 key购买 nike

作者:

   socket.setSendBufferSize(1);
socket.setTcpNoDelay(true);
writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));

用法如下:

try {
writer.write(packet.toXML());
writer.flush();
...
}
catch (Exception ioe){
if (!done) {
done = true;
...
}
}

这是客户端代码。当它的服务器断开套接字(也是 java 代码)时,为什么客户端只会在 5 - 10 分钟后抛出?它不应该在第一次尝试覆盖死连接时抛出吗?

谢谢

编辑:

关闭服务器后,TCP 状态如下:

tcp        0      0 server:443     client:50283   FIN_WAIT2 

tcp4 0 0 cient.50283 server.443 CLOSE_WAIT

编辑2:

客户端是一个安卓应用程序。从电话运行,写入的第二个数据包导致抛出。从模拟器(下面是 Mac)运行,第四个 write() 将抛出。

最佳答案

Should it not throw at the first attempt to write over the dead connection ?

没有。它所知道的是已收到 FIN,这可能只是对等方的 shutdownOutput() - 它可能仍在读取。所以TCP必须发送数据。如果对等点已关闭,它将发出 RST,TCP 将在后续写入时将其提供给应用程序。

关于java - 在断开连接的套接字上写入不会抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com