0

假设 A 向 B 发送一个大小为 N 的 UDP 消息,例如

sockaddr_in to;
to.sin_family=AF_INET;
to.sin_port=htons(port);
to.sin_addr.s_addr=inet_addr(address);
sendto(sock,(const char*)buffer,N,0,(sockaddr*)&to,sizeof(to));

现在 B 收到这条消息,期望它的大小为 N_1

sockaddr from;
socklen_t length_from=sizeof(from);
recvfrom(sock,(char*)buffer,N_1,0,&from,&length_from);

当 N_1!=N 时会发生什么?

4

1 回答 1

1

当 N_1!=N 时会发生什么?

如果接收缓冲区大于传入数据报,则将整个数据报传输到缓冲区中,并将实际长度作为 recfvrom() 的返回值返回。你现在忽略它。不要那样做。

如果接收缓冲区小于传入的数据报,则将其截断以适合接收缓冲区,超出的部分将被丢弃。返回传输到缓冲区的实际数据长度。

于 2014-07-19T07:53:33.597 回答