QT5 “Multicast Receiver Example”组播接收数据的说明

10 篇文章 0 订阅
4 篇文章 0 订阅

本文基于的QT版本为5.13.0。在更早支持组播的QT版本中,应该也是适用的。

在QT提供的“Multicast Receiver Example”示例程序中,udpSocket4这个QUdpSocket对象,是使用下面的方式,进行绑定和加入组播的:

    udpSocket4.bind(QHostAddress::AnyIPv4, 45454, QUdpSocket::ShareAddress);
    udpSocket4.joinMulticastGroup(groupAddress4);

通常情况下,这是没有问题的。

这里的“通常”,在于以下的场景:本地只有一个网络接口;或者只有一个ipv4;或者不介意绑定端口上收到的数据既有发送到组播(groupAddress4)地址的,也有可能是直接发给本地的ipv4地址的;或者发送方/接收方的端口丰富可协商,对每类业务,都能分配不同的地址/端口,等等。

然而,若是确实有脱离“通常”情况的需求时,你仍然需要对windows、linux的bind操作,进行分别的处理,在“linux下UDP组播接收不到数据的说明”一文中,对基于libuv、原生编程的两种情况的方案进行了说明,保持尽量的完整性,再补充一下关于QT的实际方案:

#if defined(_WIN32)
    udpSocket4.bind(QHostAddress("指定的本地ipv4地址,非0.0.0.0"), 45454, QUdpSocket::ShareAddress);
    udpSocket4.joinMulticastGroup(groupAddress4);
#else // 简略假设只有linux:__linux__
    // 下面是linux的不同点
    udpSocket4.bind(groupAddress4, 45454, QUdpSocket::ShareAddress);
    udpSocket4.joinMulticastGroup(groupAddress4);
#endif

 

其他

从unix网络编程中,可以较明确的获取到,在linux中,为何要这样绑定的原因说明。相反的,windows里的实现考虑,我们就不得而知了。然而,相比较而言,windows的使用方式,私以为是更为舒适的(尽管会造成同端口上,单播和组播的混乱)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值