3

在我最近的项目中,我需要使用UDP协议来传输数据。如果我使用 发送数据size = s.sendto(data, (<addr>, <port>)),UDP协议会确保数据打包成一个UDP数据包吗?如果是这样,将size == len(data)永远是True?有什么我误解了吗?

更准确地说,'sendto()' 会将我的数据分成几个较小的块,然后将每个块打包成 UDP 数据包进行传输?

4

2 回答 2

1

UDP 数据包的长度是有限的。如果你的数据太大,返回值不能等于长度。还有一些情况,比如发送缓冲区不够,网络故障。大小仅表示已发送到发送缓冲区的字节数。

于 2014-03-10T05:41:46.833 回答
0

最后,我从“UNIX 网络编程”第 2.11 章缓冲区大小和限制,UDP 输出部分得到了答案。

应用程序写入 UDP 套接字时涉及的步骤和缓冲区。

这一次,我们将套接字发送缓冲区显示为虚线框,因为它实际上并不存在。UDP 套接字有一个发送缓冲区大小(我们可以使用 SO_SNDBUF 套接字选项更改,第 7.5 节),但这只是可以写入套接字的最大 UDP 数据报的上限。如果应用程序写入的数据报大于套接字发送缓冲区大小,则返回 EMSGSIZE。

于 2014-03-13T02:06:39.763 回答