唐宋元明沁清 2023-07-03 14:37 采纳率: 53.8%
浏览 48
已结题

虚拟机中linux下udp收不到组播或广播消息?

windows下正常,然后切换到虚拟机中,在Linux下运行代码,发现组播和广播接收不到消息,点对点可以接收到消息。
将组播和广播绑定地址为任意IP这种情况,则可以接收到消息。
    因为涉及到多网卡,linux下不能指定某个IP地址进行bind接收吗?

    int nres = -1;
    QString strLocalIP = m_UdpInfo.m_cLocalIP;
    m_pRecvSockaddr_in = new sockaddr_in;

    m_pRecvSockaddr_in->sin_family = AF_INET;
    m_pRecvSockaddr_in->sin_port = htons(m_UdpInfo.m_usLocalPort);

    if(strLocalIP.isEmpty())
    {
        m_pRecvSockaddr_in->sin_addr.s_addr = INADDR_ANY;
    }
    else
    {
        nres = inet_pton(AF_INET,m_UdpInfo.m_cLocalIP,&m_pRecvSockaddr_in->sin_addr);//htonl(INADDR_ANY);    // 接收任意地址数据
        if (nres == 0 || errno == EAFNOSUPPORT)
        {
    #ifdef  _WIN32
            LogToolLib::addError(QString("接收套接字 inet_pton failed %1").arg(WSAGetLastError()));
            closesocket(pSocketFd);
    #elif linux
            LogToolLib::addError(QString("接收套接字 inet_pton failed %1").arg(strerror(errno)));
            close(pSocketFd);
    #elif unix // all unices not caught above
            LogToolLib::addError(QString("接收套接字 inet_pton failed %1").arg(strerror(errno)));
            close(pSocketFd);
    #else
    # error "Unknown"
    #endif
            return false;
        }
    }

//m_pRecvSockaddr_in->sin_addr.s_addr = INADDR_ANY;广播或者组播改为这种,就可以接收消息

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-03 16:05
    关注
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7423141
    • 除此之外, 这篇博客: 这是一个目录中的 UDP通信(服务器角色) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 介绍ESP8266中UDP服务器的建立和使用方法。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月10日
  • 创建了问题 7月3日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表