关于广播数据报接收的问题。

sr388 2003-10-22 04:53:11
我的程序要实现两个功能:一是发送广播数据,二是接收广播数据。

大致设计是这样的:
我为CMainFrame类增加了两个数据成员:

SOCKET m_RecvSocket,
m_BroadCastSocket ;

并在主窗口的WM_CREATE消息期间创建了这两个套接字,并将m_RecvSocket套接字与INADDR_ANY地址的5000端口绑定,并使用WSAAsyncSelect函数为m_RecvSocket套接字注册了一个FD_READ事件,以便有数据可读时,主窗口会收到消息。

然后,我通过一个按钮单击事件发送广播数据报,当使用代码段1发送广播数据时,主窗口能正确的接收到我用WSAAsyncSelect函数注册的FD_READ事件,顺利执行接收代码。

代码段1:
int ret ;
char *msg = "this is xxx!" ;
SOCKADDR_IN to ;

to.sin_family = AF_INET;
to.sin_addr.s_addr = htonl(INADDR_BROADCAST);
to.sin_port = htons(m_nReceiverPort);

ret = sendto(m_BroadCastSocket, msg, strlen(msg),
0, (SOCKADDR *)&to, sizeof(to));
if (ret == SOCKET_ERROR)
{
TRACE("sendto() failed: %d\n", WSAGetLastError());
}
else
{
TRACE("send ok! \n") ;
}

但是,当我使用代码段2发送广播数据报时,主窗口却不能接收到我注册的FD_READ事件,也就是说,我不能接收广播数据报了!

代码段2:
int ret ;
MAILMSG MSG_Send = {0} ; // MAILMSG是我定义的一个结构
SOCKADDR_IN to ;

to.sin_family = AF_INET ;
to.sin_addr.s_addr = htonl(INADDR_BROADCAST) ;
to.sin_port = htons(m_nReceiverPort) ;

MSG_Send.mm_dwVersion = CUR_VERSION ;
MSG_Send.mm_Type = 0x01 ; // 0x01: 成员资格查询
MSG_Send.mm_UserInfo = m_LocalUserInfo ;

ret = sendto(m_BroadCastSocket, (char *)&MSG_Send, sizeof(MSG_Send), 0,
(SOCKADDR *)&to, sizeof(to)) ;

if (ret == SOCKET_ERROR)
{
MessageBox("查询在线用户时出现错误!") ;
return ;
}
else
{
TRACE("send ok! \n") ;
}


两个代码段的唯一区别就是:代码段1发送的是一个字符串,而代码段2发送的是一个数据结构。但是不管我使用那一个代码段来发送数据,sendto的返回值都是2264,TRACE语句都会输出“send ok!”,这就是说,发送操作是成功了。可是,为什么使用代码段2来发送数据,就没有FD_READ事件触发呢?

我应该如何解决这个问题呢?请帮帮我。谢谢。
...全文
101 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sr388 2003-11-27
  • 打赏
  • 举报
回复
问题已经解决了!

广播数据报最大只能发送1472字节。如果超过这个数值,接收端无法接收。
hoffen 2003-10-23
  • 打赏
  • 举报
回复
1、是楼上兄弟说的原因
2、请检查是否用WSAANSYCSELECT()函数正确地定了MESSAGE,而MESSAGE是否正确的处理了
lzzqqq 2003-10-22
  • 打赏
  • 举报
回复
ret = sendto(m_BroadCastSocket, (char *)&MSG_Send, sizeof(MSG_Send), 0,
(SOCKADDR *)&to, sizeof(to)) ;

上面这种写法非常不严谨,因为结构在内存中排列的顺序对用户来说是不可见的。
而且sizeof(MSG_Send)是不是0呢??要是0的话,你发送0个字节当然什么也收不到了。

18,356

社区成员

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

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