我有很多进程在运行,通过套接字相互发送消息。其中,有两个进程,第一个发送24个字节到另一个(我确定它是24个字节,因为我从sendto()的返回值得到它,但在接收方,我只收到16个字节。
nRecvbytes = recvfrom(sock, recvbuf, recvlen, 0, addr, sa_len)
recvlen是24个字节,但nRecvbytes是16个字节。而且这种情况并不稳定,因为我多次运行这种情况,这种情况有时会发生但有时却不会发生。有谁知道为什么会这样? 谢谢!
答案 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
找到更多详细信息