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

...全文
165 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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端会重发。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧