Linux、windows组播通信所遇坑集合

windos系统

虚拟网卡/多网卡导致的组播不通

很多搞代码的童鞋,会在windows上安装虚拟机捣鼓各种Linux神技。很长一段时间,爽并舒服着,突然有一天蛋疼的问题找上门了:写的组播程序怎么也通不了,程序检查了一遍又一遍,头发抓掉一把又一把,还是没发现任何问题,突然灵光一现,借助网络调试工具吧,可惜然并卵,不通还是不通。码友,不用愁了,请看过来!

问题诊断

按下Win+R,运行中输入cmd,再Dos窗口中输入命令:

netsh interface ipv4 show joins
  • 1

查看哪张网卡加入了你需要的组播地址,示例如下图所示:
在这里插入图片描述
上图中如228.88.88.88是我程序加入的组播,如果在你想要的物理网卡上,通信一般没问题,如果出现在虚拟网卡上,恭喜你中奖了。

解决方案

1、禁用多余网卡
2、在创建socket时,绑定一个物理网卡上的IP地址

网卡双网段导致的组播不通

如果网卡和组播地址关联无问题,仍然不通,可能就是由于此问题导致的

解决方案

  1. 简单粗暴的方法,在IPv4高级TCP/IP设置中,去掉不需要的IP
    在这里插入图片描述
  2. 实在需要两个网段组播互通,技术手段设置
    备注:仅供参考,未经验证
    A、通过网关,进行路由,在网关路由器(可以是同一台,甚至一个网口做子接口;也可以是2台路由器)上增加这2个网段的路由【家用路由器就不要考虑了】
    ip router 0.0.0.0 0.0.0.0 192.168.1.1(假设其中一个网段为192.168.1.x)
    ip router 0.0.0.0 0.0.0.0 192.168.2.1
    B、修改掩码,使2个网段变成一个网段
    原来是192.168.1.1/255.255.255.0,改为255.255.0.0

Linux 系统

未增加路由导致组播不通

问题诊断

在终端中,输入route查看当前路由表,如下图所示:
在这里插入图片描述
如果没有相应路由,应该就是此问题导致。

解决方案

增加相应路由

route add -net 224.0.0.0 netmask 240.0.0.0 ${netcardName}
  • 1

虚拟网卡/多网卡导致的组播不通

问题诊断

终端输入命令netstat -g,查看网卡加入的组播,如下图所示:
在这里插入图片描述

解决方案

1、禁用多余网卡
2、在创建socket时,绑定一个物理网卡上的IP地址

(59条消息) Linux、windows组播通信所遇坑集合_xqligong的博客-CSDN博客_cmd 加入组播

Guess you like

Origin blog.csdn.net/tjcwt2011/article/details/121876654