中标麒麟(linux)下QUdpSocket无法使用组播发送数据问题

        今天将qt程序移植到中标麒麟下(国产linux),该程序使用到了QUdpSocket进行组播通讯。在windows上面运行的妥妥的,放到这个国产系统上顿时萎了,单播时数据能发出去,组播就是发不出去,各种查参数查资料啊,简简单单的几行代码搞得焦头烂额。最后发现在无线连接的情况下,组播能够正常往外发数据,本地连接ip手动设置时无法发送数据。这才将问题定位到网络参数配置上,最终问题出现在没有配置网关,设置了网关问题就解决了。



  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Linux使用Qt编写组播,可以使用Qt的网络模块来实现组播功能。首先,需要创建一个QUdpSocket对象来进行组播的网络通信。 ```cpp #include <QtNetwork> // 创建QUdpSocket对象 QUdpSocket udpSocket; // 加入组播udpSocket.joinMulticastGroup(QHostAddress("239.255.0.1")); ``` 接下来,可以通过绑定端口和IP地址,监听组播组的数据。 ```cpp // 绑定端口和IP地址 udpSocket.bind(QHostAddress::AnyIPv4, 1234); // 监听组播组的数据 connect(&udpSocket, &QUdpSocket::readyRead, this, &MyClass::readPendingDatagrams); // 接收数据的槽函数 void MyClass::readPendingDatagrams() { while (udpSocket.hasPendingDatagrams()) { QByteArray datagram; QHostAddress sender; quint16 senderPort; // 读取数据包 datagram.resize(udpSocket.pendingDatagramSize()); udpSocket.readDatagram(datagram.data(), datagram.size(), &sender, &senderPort); // 处理接收到的组播数据 // ... } } ``` 最后,可以通过`writeDatagram`函数向组播发送数据。 ```cpp // 向组播发送数据 QByteArray data = "Hello World"; udpSocket.writeDatagram(data, QHostAddress("239.255.0.1"), 1234); ``` 需要注意的是,组播的IP地址范围是`224.0.0.0`到`239.255.255.255`,可以根据实际需求选择一个合适的组播地址。另外,还可以通过设置组播选项,例如设置TTL值和接收缓冲区大小。 以上是一个简单的在Linux使用Qt编写组播的示例,具体的代码和功能可以根据实际需求进行扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值