Ben*_*Ben 5 .net c# networking tcp protocols
我对C#很新,所以请耐心等待.我在C#.NET 4.0中编写了一个相对简单的客户端服务器应用程序.我使用TCP协议,TCPListener和TCPClient更具体.我知道TCP协议在理论上是如何工作的.但我必须100%确定在数据传输过程中不会出现(未处理的)错误.
发送数据后,如何知道数据是否已成功接收.我可以完全依赖TCP协议的底层实现吗?所以我没有必要从另一方确认数据已收到?
至关重要的是,我确实知道哪些数据已发送并已成功接收.我知道这是一个愚蠢的问题,但我真的很想确定.谢谢你的时间和答案.
Jon*_*Jon 21
TCP保证:
它不能保证啮齿动物不会吃掉你的电缆,建筑物的电源会继续存在,甚至当你操作系统告诉它有一些数据时,你正在谈论的另一台机器上的过程也会费心去做.到达.
如果您需要确认接收到数据并采取相应措施,则需要手动发送确认(因为TCP连接是双工的,您已经有了通道来执行此操作).
当然,所有这些都不是特定于.NET,Windows或任何其他网络堆栈实现的.
更新:我想特别指出,在OS网络堆栈接受数据传输之后,您无法知道另一端的进程是否已收到该数据.网络堆栈在大多数情况下知道数据已经到达目标(通过TCP ACK消息),但是它不知道目标上的OS是否已经将它们馈送到它们预定的进程.因此,发回您自己的"收到并执行的数据"消息是唯一的选择.