linux组播自发自收 qt,Qt那些事0.0.27 之 QUdpSocket组播通讯

刚刚写的因为网断了就丢了,不想写了。

关于组播通信失败,大概率因为多网卡,通过ipconfig可以查看具体网卡情况。

C:\WINDOWS\system32>ipconfig

无线局域网适配器 WLAN:

连接特定的 DNS 后缀 . . . . . . . :

本地链接 IPv6 地址. . . . . . . . : fe80::--------78%18

IPv4 地址 . . . . . . . . . . . . : 192.168.3.165

子网掩码 . . . . . . . . . . . . : 255.255.255.0

默认网关. . . . . . . . . . . . . : 192.168.3.1

以太网适配器 本地连接* 12:

连接特定的 DNS 后缀 . . . . . . . :

本地链接 IPv6 地址. . . . . . . . : fe80::---------620%3

IPv4 地址 . . . . . . . . . . . . : 3.3.0.154

子网掩码 . . . . . . . . . . . . : 255.255.0.0

通过wireshark抓包发现,走组播的数据包是通过3.3.0.154接口发出。因此,查询相关知识,window系统,网络路由是自动选择,因此最后通过修改路由表解决此问题。

C:\WINDOWS\system32>route print

===========================&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 平台下,使用 Qt 实现组播需要以下步骤: 1. 创建 QUdpSocket 对象,并绑定到本地地址和端口号。 2. 加入一个组播组,使用 QUdpSocket 的 joinMulticastGroup() 函数,传入组播地址。 3. 使用 QUdpSocket 的 writeDatagram() 函数发送数据。 4. 在数据接收端,使用 QUdpSocket 的 bind() 函数绑定到组播地址和端口号,然后使用 QUdpSocket 的 readDatagram() 函数接收数据。 下面是一个简单的示例代码: ```cpp // 创建 QUdpSocket 对象 QUdpSocket *socket = new QUdpSocket(this); // 绑定到本地地址和端口号 socket->bind(QHostAddress::AnyIPv4, 1234); // 加入组播socket->joinMulticastGroup(QHostAddress("224.0.0.1")); // 发送数据 QByteArray data = "Hello, multicast!"; socket->writeDatagram(data, QHostAddress("224.0.0.1"), 1234); // 接收数据 connect(socket, &QUdpSocket::readyRead, [=]() { while (socket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(socket->pendingDatagramSize()); socket->readDatagram(datagram.data(), datagram.size()); qDebug() << "Received multicast data:" << datagram; } }); ``` 在这个示例中,我们创建了一个 QUdpSocket 对象,并绑定到本地地址和端口号 1234。然后加入了组播组 224.0.0.1,并使用 writeDatagram() 函数发送了一条数据。最后,在 readyRead 信号槽中接收数据,并使用 readDatagram() 函数读取数据。这个示例中使用了 Lambda 表达式来连接信号槽,你也可以使用常规的方式连接信号槽。 需要注意的是,组播地址是一个特殊的地址,不能被分配给单个主机。组播地址范围为 224.0.0.0 ~ 239.255.255.255,其中 224.0.0.0 ~ 224.0.0.255 是本地链路组播地址,只能在本地网络内使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值