vc中用UDP接收注意事项

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=缓冲区大小;

 

写这篇文章只是让后来人少走弯路

 

你可能感兴趣的:(socket,测试,buffer)