初始化代码:int  InitNetCard0(HWND hWd,char *Address)
{
BOOL optval=TRUE;
int  errno;
if((s1=socket(AF_INET,SOCK_DGRAM,0))==INVALID_SOCKET)
{
AfxMessageBox("0号网卡的套接口初始化失败!");
return 1;
}
if(setsockopt(s1,SOL_SOCKET,SO_REUSEADDR,(char FAR*)&optval,sizeof(optval))==SOCKET_ERROR)
{
AfxMessageBox("0号网卡的套接口地址重用设置失败!");
closesocket(s1);
return 1;
}
soin.sin_family =AF_INET;
soin.sin_port =htons(port);
soin.sin_addr.s_addr =inet_addr(Address);
if(bind(s1,(LPSOCKADDR)&soin,sizeof(soin))==SOCKET_ERROR)
{
AfxMessageBox("0号网卡的套接口绑定失败!");
closesocket(s1);
return 1;

if(setsockopt(s1,SOL_SOCKET,SO_BROADCAST,(char FAR*)&optval,sizeof(optval))==SOCKET_ERROR)
{
AfxMessageBox("0号网卡的套接口广播设定失败!");
closesocket(s1);
return 1;
}
if(WSAAsyncSelect(s1,hWd,WM_MCAST_NETREAD0,FD_READ)==SOCKET_ERROR)
{
AfxMessageBox("0号网卡的异步选择设定失败!");
closesocket(s1);
return 1;
}
return 0;}当接收消息触发时进行数据的接收,但是这时接收的数据是否完整(发送端发送的完整数据)?
如果不完整怎样判断我收的到udp广播数据是完整的?

解决方案 »

  1.   

    UDP的数据一次不超过512字节,
    一般都能完整接收。除非您的数据自己有关于数据完整性的描述(不如字节数),
    无法判断数否完整。一般,如果数据不完整,可以直接丢弃,
    Server端会重发。
      

  2.   

    发送的时候,将数据包的长度包含在内。比如:
    struct MyPacket{
    int nType;//类型定义
    int len;//数据包长度
    .....
    };先判断收到的数据长度是否大于2*sizeof(int),不是,收到的数据不完整,是则检查收到的数据长度是否==len的长度。不是,则表示收到的数据不完整。是则完整