写了一个Qt程序,发送udp广播,以前在同局域网内的另外一台电脑可以收到。但是在装了虚拟机之后,用虚拟机里的这个程序发送的udp广播报文是可以用wireshark抓包到的,而且我虚拟机网络是桥接模式,也用ipconfig确认了虚拟机和主机在同一局域网内,网关相同。可是主机里的程序却接收不到虚拟机的报文,而且主机似乎没法再发出udp广播了,因为没有抓到主机的udp报文,所以现在局域网内的另一台电脑也没法和它互通了。程序本身没有任何修改过的地方!
1条回答 默认 最新
关注
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
问题描述:在同一局域网内,使用Qt程序发送UDP广播,另一台电脑能够收到广播;在装了虚拟机后,虚拟机里的程序可以正常发送UDP广播,但是主机里的程序无法接收虚拟机发出的广播,同时主机也无法再发送UDP广播,导致局域网内的其他电脑无法与其互通。 可能的原因:- 防火墙或安全软件拦截了UDP广播。
- 虚拟机网络配置不正确。
- UDP广播端口被占用或冲突。 解决方案:
- 检查防火墙或安全软件是否设置允许UDP广播通过,并尝试关闭它们。可以使用telnet命令测试UDP端口是否被占用。
- 确认虚拟机的网络配置是否正确,如IP地址、网关、子网掩码等设置是否与主机在同一网段。
- 尝试更换UDP广播端口或使用其他广播地址,如224.0.0.1。 参考代码: 以下是在Qt中发送UDP广播的示例代码,可在主机和虚拟机中分别运行并测试:
// 声明广播地址和端口号 const QString BROADCAST_ADDRESS = "192.168.0.255"; const int BROADCAST_PORT = 1234; // 创建UDP套接字 QUdpSocket *udpSocket = new QUdpSocket(this); // 绑定套接字并绑定接收端口 if (!udpSocket->bind(QHostAddress::AnyIPv4, BROADCAST_PORT, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint)) { qDebug() << "Error: " << udpSocket->errorString(); } // 设置广播选项 udpSocket->setSocketOption(QAbstractSocket::BroadcastOption, 1); // 发送广播 QByteArray datagram = "hello"; udpSocket->writeDatagram(datagram, QHostAddress(BROADCAST_ADDRESS), BROADCAST_PORT);
可以在主机和虚拟机中分别运行该代码,然后使用wireshark在同一网段内进行抓包,以确认是否能够收到广播。若能正常收到,则为程序或配置问题;否则,可以结合以上解决方案进行排查。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 Linux(ubuntu)操作相关问题
- ¥15 python深度学习代码求跑
- ¥100 对接美团闪购医药接口相关问题
- ¥15 嵌入式软件电子烟开发
- ¥15 职场 Excel 查重问题
- ¥15 求怎么用idea2021.3.2创建web项目并配置tomcat
- ¥100 or-tools的相关问题
- ¥15 有可能用平板通过拓展坞来烧录程序吗(keil5的那种)
- ¥15 状态图的并发态问题咨询
- ¥15 PFC3D,plot