gpt4 book ai didi

python - send() 和 receive() 的奇怪行为

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

抱歉英语不好

为什么如果我在服务器上有两个 send()-s 和两个 recv() -s 在客户端,有时第一个 recv() 会从服务器获取第二个 send() 的内容,而不是只获取第一个的内容让另一个 recv() 获取另一个 send() 的“正当且正确”的内容?

我怎样才能以其他方式获得这项工作?

最佳答案

这是设计使然。

TCP 流是您可以在两个端点之间发送字节的 channel ,但传输是基于流的,而不是基于消息的。

如果您想发送消息,那么您需要对它们进行编码...例如,通过在前面添加一个“大小”字段,该字段将通知接收者正文需要多少字节。

如果您发送 100 个字节,然后发送其他 100 个字节,则接收方很可能会同时看到 200 个字节,甚至在两个不同的读取命令中看到 50 + 150 个字节。如果您想要消息边界,那么您必须自己将它们放入数据中。

有一个较低层(数据报)允许发送消息,但是它们的大小有限并且无法保证传递(即消息可能会丢失,该消息将被重复,或者您发送的两条消息将被发送)以不同的顺序到达)。TCP 流构建在此数据报服务之上,并实现在两个端点之间可靠传输数据所需的所有逻辑。

作为替代方案,有一些库旨在在端点之间提供可靠的消息传递,例如 ZeroMQ .

关于python - send() 和 receive() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39687586/

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