Windows下Socket编程中UDP通讯使用INADDR_ANY参数是否有效?

迷路的指南针 南昌航空大学 2020-03-15 07:22:44
如题,公司windows PC端祖传代码关于组播那块都是bind好几个网卡,然后挨个发送组播报文。经过查询我发现有INADDR_ANY这个参数可以用,但是使用这个参数,bind正常,sendto也正常报文根本发不出去。要是挨个bind每个网卡的IP就可以。我怀疑我的代码有问题,从网上找过开源代码HP-SOCKET,里面也有关于组播代码的Demo,实测抓包,没有数据出来。有没有经验丰富的大神愿意讨教的?是不是INADDR_ANY只在Linux可用?本人Win10 64位电脑,使用vs2010。生成的exe程序使用管理员权限启动,使用抓包软件也无法捕获搜索报文。当然如果这个问题比较复杂我可追加分。
...全文
85 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
引用 3 楼 走好每一步 的回复:
我记得bind INADDR_ANY, 会选择任意一个网卡出去,做服务器就不太合适 抓包软件也要选对网卡才能抓到包的
使用INADDR_ANY进行bind,在多网卡的Windows下好像也不能捕获报文。我组件局域网,一台服务器端,2台客户端,一台客户端(192.168.1.100)发送组播请求命令,另外一台客户端(它有2个网卡,一个192.168.1.125,一个169.254.94.13)只监听,监听的电脑bind INADDR_ANY时,如果有多个网卡,那么它将无法获取到组播报文,如果只有一个网卡的情况下时可以的。请问我有那里做的不对吗?
回复
使用INADDR_ANY进行bind,在多网卡的Windows下好像也不能捕获报文
回复
引用 3 楼 走好每一步 的回复:
我记得bind INADDR_ANY, 会选择任意一个网卡出去,做服务器就不太合适 抓包软件也要选对网卡才能抓到包的
谢谢大佬,确实是这样的。我因为装了虚拟机,所以有2个虚拟网卡。估计组播的报文往虚拟网卡里面扔了,所以对接的设备没有收到,抓包软件也没有收到。我把虚拟网卡禁用之后,果然正常了。
回复
走好每一步 2020-03-16
我记得bind INADDR_ANY, 会选择任意一个网卡出去,做服务器就不太合适 抓包软件也要选对网卡才能抓到包的
回复
引用 1 楼 走好每一步 的回复:
bind INADDR_ANY 有效的,只是有时候bind特定地址会避免一些问题
是否可以理解为套接字使用bind INADDR_ANY 只能用来监听recvfrom 不能用sendto?
回复
走好每一步 2020-03-16
bind INADDR_ANY 有效的,只是有时候bind特定地址会避免一些问题
回复
发动态
发帖子
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
社区公告
暂无公告