gpt4 book ai didi

sockets - 读取UDP套接字: records or stream

转载 作者:行者123 更新时间:2023-12-03 12:01:27 26 4
gpt4 key购买 nike

假设UDP发送者多次执行sendto:

sendto(s,buffer,100,...);
sendto(s,buffer,200,...);
sendto(s,buffer,300,...);

数据可用时,Receiver执行以下代码:

无效的OnReceive()
{
recvfrom(s,buffer,1000,...);
}

现在,如果在调用recvfrom时所有数据(100 + 200 + 300)都可用,那么是否有可能通过一个recvfrom调用或几个大小无法预测的recvfrom调用读取数据?还是总会收到与发送时相同的部分:100、200、300?

要编写100%正确的接收器代码,我应该实现某种流解析逻辑,还是实现数据记录读取逻辑?

对于这个问题,我认为数据不会丢失并且数据包的顺序不会更改,尽管在一般情况下,这对于UDP套接字是不正确的。

最佳答案

从UDP套接字读取一次会使出队列,而不管队列中有多少数据报(异常(exception)是新的Linux特定的recvmmsg(2) API),即假设数据包未重新排序且提供给内核的缓冲区足够大,您将在三个读取中获得100、200和300字节。

UDP应用程序通常是面向记录的。

关于sockets - 读取UDP套接字: records or stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8525761/

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