linux下同一套接字绑定网卡接收单播/多播报文

时间:2021-07-13 11:03:02
大家好,我想在Linux下使用qt,通过一个QUdpSocket对象绑定某一块网卡,既接收单播报文,又接收多播报文。
目前可通过bind绑定某一块网卡接收单播报文,不过多播报文就无法收到;
如果要接收多播报文,bind不能绑定具体哪块网卡的地址,否则收不到多播报文,使用joinMulticastGroup()指定从哪块网卡接收多播报文,这样虽然可以从指定网卡接收多播报文,但同时也可以接收到来自所有网卡的单播报文;
参考了C的实现方式,也没有发现可以实现的方式,原因和qt下大致一样,有人建议用两个套接字,一个接收单播,一个接收多播,如果这样,那单播和多播的端口还得不一样,有点麻烦,好像windows下就可以实现,不论是单播还是多播都可以通过bind绑定网卡接收;
不知各位大牛有何高见?

5 个解决方案

#1


系统环境为linux,硬件环境为双网卡,当接收数据时,两块网卡都接收到一样的数据,但只是从一块网卡收,等于另一块网卡为备份数据,当正在使用的网卡出问题时,马上从另一块网卡接收数据。

#2


在windows上使用qt 5.3.1+minGW,通过bind来绑定单播/多播从指定网卡收数据成功,看来windows和linux在这方面有区别啊。 

#3


自己顶一下。

#4


您好!我现在遇到相同问题,不知道你的问题是怎么解决的

#5


该回复于2015-10-23 08:29:57被管理员删除

#1


系统环境为linux,硬件环境为双网卡,当接收数据时,两块网卡都接收到一样的数据,但只是从一块网卡收,等于另一块网卡为备份数据,当正在使用的网卡出问题时,马上从另一块网卡接收数据。

#2


在windows上使用qt 5.3.1+minGW,通过bind来绑定单播/多播从指定网卡收数据成功,看来windows和linux在这方面有区别啊。 

#3


自己顶一下。

#4


您好!我现在遇到相同问题,不知道你的问题是怎么解决的

#5


该回复于2015-10-23 08:29:57被管理员删除