首页 文章

读取UDP套接字:记录或流

提问于
浏览
1

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

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

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

void OnReceive()
{
    recvfrom(s, buffer, 1000, ...);
}

现在,如果在调用recvfrom时所有数据(100 200 300)都可用,是否可能通过一次recvfrom调用或几次具有不可预测大小的recvfrom调用来读取它?或者它将始终被发送的相同部分收到:100,200,300?

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

对于这个问题,我假设数据没有丢失,数据包顺序没有改变,但是,在一般情况下,这对于UDP套接字是不正确的 .

1 回答

  • 2

    无论队列中有多少个(UDP新特定的 recvmmsg(2) API除外),UDP套接字中的一个读取都会使数据报出列,即假设数据包没有重新排序,并且你给内核的缓冲区足够大,你将获得100三次读取,200和300字节 .

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

相关问题