Qt 无线局域网内 UDP 广播只能单向发送或接收

1. 实验来源

《Qt Creator快速入门 第三版》第18章 18.3 UDP 实验,udpsender(广播) 和 udpreceiver。

2. 实验配置

两台主机 PC1 和 PC2 接入同一无线路由器。

3. 测试

3.1 同一主机上测试发送和接收

使用 udpsender 广播,使用 udpreceiver 可以接收。

3.2 两台主机一接一发

PC1 和 PC2 分别使用 UDP 调试助手监听对方端口,相互发送和接收都正常。

PC1 使用 udpsender 广播,PC2 使用 udpreceiver 可以接收。
PC2 使用 udpsender 广播,PC1 使用 udpreceiver 无法接收。

4. 问题讨论

为什么两台主机无法进行双向广播?

来自网络的相关信息:

  1. 禁用主机上的虚拟网络设备;
  2. 两台主机端口号要一致;
  3. 防火墙;
  4. 有线网络可以广播,无线网络只能进行 x.x.x.255 无法进行全域广播;

所以,排除前三项列出的问题,问题应该出在无线路由器对全域广播的限制上。也就是说通过无线路由器搭建的局域网无法进行广播。至于有线局域网,因为没有设备没有进行实验。

如果还是希望在无线局域网内进行广播,可以对 IP 地址进行限制:

// 全域广播使用 QHostAddress::Broadcast 即 255.255.255.255
sender->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, port);

// 限制地址域 QHostAddress("192.168.1.255"),需要将局域网内设备 IP 地址改成该段内的地址
sender->writeDatagram(datagram.data(), datagram.size(), QHostAddress("192.168.1.255"), port);
posted @ 2021-12-13 11:45  xiaobo0602  阅读(534)  评论(0编辑  收藏  举报