gpt4 book ai didi

c# - .NET TCP 协议(protocol)有多可靠?

转载 作者:可可西里 更新时间:2023-11-01 02:31:48 25 4
gpt4 key购买 nike

我是 C# 的新手,所以请多多包涵。我正在用 C# .NET 4.0 编写一个相对简单的客户端服务器应用程序。我正在使用 TCP 协议(protocol),更具体地说,TCPListener 和 TCPClient。我知道 TCP 协议(protocol)在理论上是如何工作的。但我必须 100% 确定在数据传输过程中不会出现(未处理的)错误。

发送数据后,我如何知道数据是否被成功接收。我可以完全依赖 TCP 协议(protocol)的底层实现吗?所以不需要我从另一方确认数据已收到?

我真正知道哪些数据已发送并成功接收,这一点至关重要。我知道这是一个愚蠢的问题,但我真的很想确定。感谢您的宝贵时间和答复。

最佳答案

TCP 保证:

  • 您发送的数据将按照您发送的顺序到达
  • 您发送的数据将完全按照您发送的方式接收(未修改)
  • 不会收到其他(虚假)数据

它不能保证啮齿动物不会吃掉你的电缆,建筑物的电源会保持开启,甚至当操作系统告诉它一些数据因为它已经到了。

如果您需要确认已收到数据并对其进行操作,则需要手动发回确认(因为 TCP 连接是双工的,您已经有一个 channel 可以执行此操作)。

当然,所有这些并不以任何方式特定于 .NET、Windows 或网络堆栈的任何其他实现。

更新:我想特别指出的是,在操作系统网络堆栈接受数据传输后,您无法知道进程另一端收到了该数据。在大多数情况下,网络堆栈知道数据已到达目标(通过 TCP ACK 消息),但它不知道目标上的操作系统是否已将它们提供给它们预定的进程。因此,发回您自己的“收到数据并采取行动”消息是唯一的选择。

关于c# - .NET TCP 协议(protocol)有多可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5641958/

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