【发布时间】:2016-04-28 09:29:19
【问题描述】:
我正在开发一个内部 TCP 服务器和 TCP 客户端。当丢包率为 0% 时,服务器和客户端工作正常。但是,当我有 20% 或更多的数据包丢失时,我会看到重复的 TCP 消息。我收到这样的东西....
Client <-- MessageA -- Server
Client -- MessageB --> Server
Client <-- MessageCMessageA -- Server
有没有可能 MessageA 没有完全发送到客户端,它超时,然后 TCP 重新发送它,然后原始消息发送它,客户端稍后收到?
我的问题是 TCP 是否可以这样工作,以及如果网络包含 20% 或更多的丢包率,这是否是一种可能的情况。
客户端和服务器如何发送/接收数据的基本原理...
socket.recv(1024)
socket.send(1024)
【问题讨论】:
-
假设您使用的是内置 TCP/IP 库并假设所有片段最终在连接超时之前到达,TCP 提供了您无需担心重复和重传的保证.这是您选择 TCP 而不是 UDP 的主要原因之一……这也是数据正确排序的保证。
-
好的,谢谢。我只是想在开始寻找错误之前确定一下。
-
也许您认为您的
recv调用将始终准确返回 1,024 个字节?缓冲区大小是将接收的最大字节数,而不是实际数量。向我们展示您的完整代码以接收消息。