udp广播接收问题。

newsark 2004-12-20 11:36:38
初始化代码:

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广播数据是完整的?

...全文
129 点赞 收藏 4
写回复
4 条回复
sharkhuang 2004年12月20日
包头加上长度!可以判断是否完整
回复 点赞
GameWeaverDummy 2004年12月20日
到网络版可能得到更多信息
回复 点赞
hyamw 2004年12月20日
发送的时候,将数据包的长度包含在内。比如:
struct MyPacket{
int nType;//类型定义
int len;//数据包长度
.....
};

先判断收到的数据长度是否大于2*sizeof(int),不是,收到的数据不完整,是则检查收到的数据长度是否==len的长度。不是,则表示收到的数据不完整。是则完整
回复 点赞
双杯献酒 2004年12月20日
UDP的数据一次不超过512字节,
一般都能完整接收。

除非您的数据自己有关于数据完整性的描述(不如字节数),
无法判断数否完整。

一般,如果数据不完整,可以直接丢弃,
Server端会重发。
回复 点赞
发动态
发帖子
网络编程
创建于2007-09-28

7880

社区成员

6.4w+

社区内容

VC/MFC 网络编程
社区公告
暂无公告