为什么SO_BROADCAST不起作用

vcf_reader 2011-04-24 02:48:00
代码示意:

CSocket* pSocket = new CSocket();
BOOL optVal = TRUE;
BOOL optVal1 = FALSE;
UINT nPort = 3569;
CString IP_addr(_T("192.168.105.20"));
pSocket->SetSockOpt(SO_REUSEADDR,&optVal,sizeof(optVal),SOL_SOCKET);
pSocket->SetSockOpt(SO_BROADCAST,&optVal,sizeof(optVal),SOL_SOCKET);
pSocket->SetSockOpt(SO_EXCLUSIVEADDRUSE,&optVal1,sizeof(optVal1),SOL_SOCKET);
pSocket->Create(nPort,SOCK_DGRAM,IP_addr);

为什么只有一个程序能接收?

哪位高手回答一下??

期待中……
...全文
591 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcf_reader 2011-04-25
  • 打赏
  • 举报
回复
高手在哪里?
vcf_reader 2011-04-24
  • 打赏
  • 举报
回复
按照MSDN的说法,SO_REUSEADDR就是为了让多个程序读取同一网卡的数据。可实际上没有起作用。
vcf_reader 2011-04-24
  • 打赏
  • 举报
回复
回7楼,我在6楼说过,这两条语句加不加不影响最终结果。
一开始就是没有的。
ArcRain 2011-04-24
  • 打赏
  • 举报
回复
我还以为你要进行广播,MSDN已经说明了设置SO_BROADCAST是为了Configures a socket for sending broadcast data. 如果你只是接收,那么应该不需要设置SO_BROADCAST。
vcf_reader 2011-04-24
  • 打赏
  • 举报
回复
补充一下,
pSocket->SetSockOpt(SO_BROADCAST,&optVal,sizeof(optVal),SOL_SOCKET);
pSocket->SetSockOpt(SO_EXCLUSIVEADDRUSE,&optVal1,sizeof(optVal1),SOL_SOCKET);
这两条语句是可以不要的。
我实在没有找到原因,所以加上这两句,最后结果还是一样的。
vcf_reader 2011-04-24
  • 打赏
  • 举报
回复
3楼答非所问。
我要的是两个或以上的程序读同一网卡的数据。
vcf_reader 2011-04-24
  • 打赏
  • 举报
回复
2楼的方法已经试过了。
MSDN说得很清楚,SetSockOpt() 应该在 Bind() 之前调用;Create() 内部集成了 Bind()。
wocow3 2011-04-24
  • 打赏
  • 举报
回复
192.168.105.20又不是广播地址。。
ArcRain 2011-04-24
  • 打赏
  • 举报
回复
我觉得你可以这样试试,先Create,再调用SetSockOpt设置参数。
vcf_reader 2011-04-24
  • 打赏
  • 举报
回复
无人回答,自己先顶一下

18,356

社区成员

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

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