socket接收的字节数少于发送的字节

时间:2013-11-25 05:37:17

标签: c sockets recv sendto

我有很多进程在运行,通过套接字相互发送消息。其中,有两个进程,第一个发送24个字节到另一个(我确定它是24个字节,因为我从sendto()的返回值得到它,但在接收方,我只收到16个字节。

nRecvbytes = recvfrom(sock, recvbuf, recvlen, 0, addr, sa_len)

recvlen是24个字节,但nRecvbytes是16个字节。而且这种情况并不稳定,因为我多次运行这种情况,这种情况有时会发生但有时却不会发生。有谁知道为什么会这样? 谢谢!

2 个答案:

答案 0 :(得分:3)

接收字节的公共性小于发送函数中指定的数据长度或长度。

您需要多次呼叫接收,直到您获得所需数据。数据包可以分解为多个数据包,这可能导致这种情况。

答案 1 :(得分:0)

请查看您用于接收功能的标志

您遇到的行为与使用MSG_PEEK标志时的情况类似。

MSG_PEEK, Leave received data in queue.

使用MSG_WAITALL标志,您只需读取所有可用数据即可缓冲。

MSG_WAITALL, Attempt to fill the read buffer.

您可以在http://pubs.opengroup.org/onlinepubs/009695399/functions/recv.html

找到更多详细信息