Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking TCP写入错误,但不是真正的错误_Networking_Tcp_Network Programming - Fatal编程技术网

Networking TCP写入错误,但不是真正的错误

Networking TCP写入错误,但不是真正的错误,networking,tcp,network-programming,Networking,Tcp,Network Programming,我一直在测试一个程序,它在两台机器之间通过1Gbps的线路进行简单的通信。在线路上运行TCP通信时,当网络完全被淹没(以或接近100%的使用率运行)时,我偶尔会在客户端收到写错误(由于超时)。当我运行同一程序的多个实例到不同的端口时,通常会发生这种情况 我的问题是,是否有可能获得写入错误,但仍在服务器端接收消息。看来这就是正在发生的事情,我不太清楚为什么。可能是因为返回到客户端的ACK超时了吗?是的,这是可能的。TCP不保证接收成功发送的数据,也不保证不接收未成功发送的数据。这个问题无法解决。这

我一直在测试一个程序,它在两台机器之间通过1Gbps的线路进行简单的通信。在线路上运行TCP通信时,当网络完全被淹没(以或接近100%的使用率运行)时,我偶尔会在客户端收到写错误(由于超时)。当我运行同一程序的多个实例到不同的端口时,通常会发生这种情况


我的问题是,是否有可能获得写入错误,但仍在服务器端接收消息。看来这就是正在发生的事情,我不太清楚为什么。可能是因为返回到客户端的ACK超时了吗?

是的,这是可能的。TCP不保证接收成功发送的数据,也不保证不接收未成功发送的数据。这个问题无法解决。这就是所谓的将军问题。总是有办法释放消息/数据包,使发送者得出错误的结论。TCP保证接收方接收到与发送方发送的相同的字节流,但可能在任意点被切断

这种不可靠性也有性能方面的原因。TCP数据在两台主机和网络上都有缓冲区。确认延迟


你必须接受这个。如果您让您的场景更具体,我可以建议一些处理策略。

send
将数据放入TCP发送缓冲区

如果发送缓冲区没有足够的空间,
send
将阻止将数据完全或部分复制到发送缓冲区,或者达到设计的超时


读取超时和写入超时正常。你应该检查并处理它们。方法是在超时后重新启动读/写操作。您还需要注意除超时之外的其他读/写错误。

谢谢,让我了解将军问题或多或少是我在寻找的。这一点说得太宽泛了。TCP确实保证您不会收到两次数据,或者数据不正常,或者数据中有洞。您收到了什么错误?由于超时而捕获的写入错误