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

我试图通过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。 我知道我可以跳过不必要的字节)但无论如何,为什么它可能会发生?

Solutions Collecting From Web of "通过recvfrom(UDP)接收一部分数据包"

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

UDP对消息进行操作,而不是象TCP那样的流。 使用UDP时, sendto()recvfrom()之间有sendto()关系。 没有选项可以接收UDP中的部分数据,它是一种全有或全无的传输方式。 您必须BUFLEN+12 recvfrom()整个BUFLEN+12信息,然后决定是否要实际使用它。 这就是UDP的工作方式。