一尘不染

通过recvfrom(UDP)接收一部分数据包

linux

我正在尝试通过recvfrom接收数据包的一部分。它实际上是这样的:

recvfrom(sockfd, serialised_meta, 12, flags, src_addr, addrlen);
recvfrom(sockfd, serialised_buf, BUFLEN, flags, src_addr, addrlen);

数据是这样发送的:

 bufd->Serialise(serialised_buf, BUFLEN+12);
 sendto(sockfd, serialised_buf, BUFLEN+12, flags, dest_addr, addrlen);

因此,想法是先读取一些元数据,然后再决定是否接收其他内容。问题是如果第二个缓冲区(serialised_buf)开头,我会收到4个’/
0’字节。这似乎不是序列化的问题,我以前使用过序列化,并且在我一次接收到整个数据包(元和数据)的同时,一切都很酷。关于如何解决的任何想法?

PS。我知道我可以跳过不必要的字节)但是无论如何,为什么会发生这种情况?


阅读 927

收藏
2020-06-03

共1个答案

一尘不染

UDP不是“流”协议…一旦执行了初始recvfrom,包的其余部分就会被丢弃。第二个recvfrom正在等待下一个数据包…

2020-06-03