gpt4 book ai didi

c - 多次发送,一次接收

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:56 25 4
gpt4 key购买 nike

我对unix编程中send和recv的机制感到困惑:如果我使用 multiple send 将一些字符串发送到 recv,然后使用缓冲区足够大的 recv,有时我会得到一个完整的字符串,它由来自 send 的所有字符串组成,但有时我只得到其中的一部分.为什么不同?我该如何应对?

最佳答案

因为距离、时间和其间发生的事情。

假设您正在谈论 tcp,根据各种设置,您可能会在数据包发出之前执行 5 次 send。 Tcp 不知道你的“字符串”是什么。它所看到的只是来来去去的字节流。

也许一半的字符串在一个数据包中到达,而您的 recv 一次读取就获得了这些字节。但是字符串的后半部分在第二个数据包中,该数据包丢失并被某些机器沿路由重新传输或分段为 2 个数据包。你无法知道。

因此,您构建自己的应用程序以了解自己的消息边界,并据此进行规划。 对应用程序有意义的消息必须由某些内容(例如换行符)分隔或以长度字节为前缀,指示消息中有多少字节。您接收直到获得该字节数并且可以对完整消息做一些有意义的事情。

关于c - 多次发送,一次接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22278833/

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