UDP接收数据时,见之前的代码在接收包的时候,常见的代码如下:
int byteLeft = sizeof(BROADCASTHEADER);
int index = 0;
INT nsize = sizeof(SOCKADDR_IN);
while(byteLeft>0)//获取广播包头
{
int num = recvfrom(listener,&buffer[index],byteLeft,0,(SOCKADDR FAR *)&sock_client,
&nsize);
if(num==SOCKET_ERROR)
{
return;
}
index += num;
byteLeft -=num;
}
但是这个运行起来有问题,因为recvfrom要求接收端的缓冲区足够大以接收整个udp数据包,而上面的代码只是接收一部分
UDP数据包,从测试中发现,udp包的数据已经放到缓冲区中了,但是由于指定的的buffer大小不足以容纳整个UDP包,所以
上面程序中num 收到的返回值是SOCKET_ERROR;知道了这一点,解决也就简单了许多。
byteLeft=缓冲区大小;
写这篇文章只是让后来人少走弯路