gpt4 book ai didi

c# - 丢失 TCP 连接时的数据

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:07 24 4
gpt4 key购买 nike

场景是我在家庭网络上通过 TCP 将数据从一台机器传输到另一台机器。发送方实例化一个 TCPClient 并将数据写入由 GetStream() 返回的 NetworkStream。我的理解是,NetworkStream 中的数据最终会被发送到网卡上的缓冲区,并通过物理介质传输。

但是,如果连接中断,MemoryStream中的数据和NICs buffer中的数据都会丢失,但是在我的应用中,数据是写入流中的,我可以天真地假设数据被发送到监听套接字,但显然不是这样。重新建立连接后,应用程序将恢复发送数据,据其所知,传输已中断,但这并未考虑 NIC 缓冲区和 MemoryStream 对象中丢失的数据.

除了自己编写应用层协议(protocol)之外,还有什么办法可以解决这个问题吗?

最佳答案

假设写入套接字的数据一定会到达。这意味着 TCP 堆栈必须在每个数据包之后等待确认。

显然,这不是它的工作方式。

除非您已成功关闭连接,否则 TCP 不保证到达。只有到那时,您才知道一切都已收到。

您可能需要在应用层建立恢复协议(protocol)。问问对方第一次连接到什么程度。

评论中的大量讨论让我做出以下澄清:如果连接中断,发送方无法可靠地知道另一方收到了多少字节。他会可靠地知道不是所有的东西都收到了,但不知道什么收到了。

关于c# - 丢失 TCP 连接时的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484963/

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