织芜 2024-03-24 08:52 采纳率: 72%
浏览 29
已结题

由于vmware虚拟机导致的Qt程序udp广播失败

写了一个Qt程序,发送udp广播,以前在同局域网内的另外一台电脑可以收到。但是在装了虚拟机之后,用虚拟机里的这个程序发送的udp广播报文是可以用wireshark抓包到的,而且我虚拟机网络是桥接模式,也用ipconfig确认了虚拟机和主机在同一局域网内,网关相同。可是主机里的程序却接收不到虚拟机的报文,而且主机似乎没法再发出udp广播了,因为没有抓到主机的udp报文,所以现在局域网内的另一台电脑也没法和它互通了。程序本身没有任何修改过的地方!

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-24 08:53
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述:在同一局域网内,使用Qt程序发送UDP广播,另一台电脑能够收到广播;在装了虚拟机后,虚拟机里的程序可以正常发送UDP广播,但是主机里的程序无法接收虚拟机发出的广播,同时主机也无法再发送UDP广播,导致局域网内的其他电脑无法与其互通。 可能的原因:
    1. 防火墙或安全软件拦截了UDP广播。
    2. 虚拟机网络配置不正确。
    3. UDP广播端口被占用或冲突。 解决方案:
    4. 检查防火墙或安全软件是否设置允许UDP广播通过,并尝试关闭它们。可以使用telnet命令测试UDP端口是否被占用。
    5. 确认虚拟机的网络配置是否正确,如IP地址、网关、子网掩码等设置是否与主机在同一网段。
    6. 尝试更换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在同一网段内进行抓包,以确认是否能够收到广播。若能正常收到,则为程序或配置问题;否则,可以结合以上解决方案进行排查。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月1日
  • 已采纳回答 3月24日
  • 创建了问题 3月24日

悬赏问题

  • ¥20 Linux(ubuntu)操作相关问题
  • ¥15 python深度学习代码求跑
  • ¥100 对接美团闪购医药接口相关问题
  • ¥15 嵌入式软件电子烟开发
  • ¥15 职场 Excel 查重问题
  • ¥15 求怎么用idea2021.3.2创建web项目并配置tomcat
  • ¥100 or-tools的相关问题
  • ¥15 有可能用平板通过拓展坞来烧录程序吗(keil5的那种)
  • ¥15 状态图的并发态问题咨询
  • ¥15 PFC3D,plot