读取UDP套接字:记录或流



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

<>之前Sendto (s, buffer, 100,…);Sendto (s, buffer, 200,…);Sendto (s, buffer, 300,…);之前

当数据可用时,接收器执行以下代码:

<>之前空白OnReceive (){Recvfrom (s, buffer, 1000,…);}之前

现在,如果在调用recvfrom时所有数据(100+200+300)都是可用的,那么它是否可能被一个recvfrom调用读取,或者被几个大小不可预测的recvfrom调用读取?还是会一直按发送时的相同比例收到:100,200,300 ?

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

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

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

UDP应用通常是面向记录的

相关内容

  • 没有找到相关文章

最新更新