找回密码
 立即注册
收起左侧

主机往组播地址发送消息只有自己能收到

3
回复
4485
查看
[复制链接]
累计签到:4 天
连续签到:1 天
来源: 2019-2-28 09:40:53 显示全部楼层 |阅读模式
2Qter豆
用别人例程的UDP组播代码两台PC机运行代码,也就是两台主机都加入了同一个组播后,其中一台电脑往组播地址发送消息只有自己能收到,另一台电脑收不到消息,有遇到过这种问题的吗?什么原因?怎么解决?

回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2019-2-28 09:42:35 显示全部楼层
两台电脑IP地址、网关等都设置好了,也通过网线连接了,互相往对方IP地址发消息可以互相接收到,就是往组播发消息接收不到
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2019-2-28 09:47:42 显示全部楼层
这是代码:

#include "widget.h"
#include "ui_widget.h"
#include <QHostAddress>

Widget::Widget(QWidget *parent) Widget(parent),ui(new Ui::Widget)
{
    ui->setupUi(this);


    udpSocket = new QUdpSocket(this);

    udpSocket->bind(QHostAddress::AnyIPv4, 8888);
    udpSocket->joinMulticastGroup( QHostAddress("224.0.2.2") );

    setWindowTitle("服务器端口:8888");

    connect(udpSocket, &QUdpSocket::readyRead, this, &Widget::dealMsg);
}

void Widget::dealMsg()
{
    char buf[1024] = {0};
    QHostAddress cliAddr; //对方地址
    quint16 port;    //对方端口
    qint64 len = udpSocket->readDatagram(buf, sizeof(buf), &cliAddr, &port);
    if(len > 0)
    {
        QString str = QString("[%1:%2] %3").arg(cliAddr.toString()).arg(port).arg(buf);

        ui->textEdit->setText(str);
    }


}

Widget::~Widget()
{
    delete ui;
}
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2019-3-1 09:38:46 显示全部楼层
joinMulticastGroup这里,把bool QUdpSocket::joinMulticastGroup(const QHostAddress &groupAddress)
的调用改成重载函数
bool QUdpSocket::joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)试试看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了