终极办法解决QT程序接收发送组播数据异常

2 篇文章 0 订阅

系统:windows 10

组播地址:239.1.1.15

端口号:收发都是6002

 
QString strName = ui->comboBox_network->currentData().toString();
    interface =  QNetworkInterface::interfaceFromName(strName);   // 根据选择名称获取网卡

QByteArray data;
tftudpsocket = new QUdpSocket();
        tftsendaddres.setAddress("239.1.1.15");
        tftudpsocket->bind(QHostAddress(ip), 6002, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
        //加入组播组
        tftudpsocket->setSocketOption(QAbstractSocket::MulticastLoopbackOption, 0);
        //设置组播网卡
        tftudpsocket->setMulticastInterface(interface);

        tftudpsocket->joinMulticastGroup(QHostAddress(tftsendaddres), interface);
        connect(tftudpsocket, SIGNAL(readyRead()), this, SLOT(read_tftdata()));
        //发送一个空数据出去
        tftudpsocket->writeDatagram(data, QHostAddress(tftsendaddres), 6002);

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中的UDP(User Datagram Protocol)提供了一种无连接的数据报网络通信方式,适用于对实时性要求较高的应用场景,比如视频流和组通信。在Qt中,你可以使用QAbstractSocket子类QUdpSocket来创建一个UDP套接字,并进行组数据发送。 以下是使用Qt UDP向组地址发送数据的基本步骤: 1. **创建QUdpSocket实例**: ```cpp QUdpSocket *socket = new QUdpSocket(this); ``` 2. **设置组地址和端口**: ```cpp quint32 multicastAddress = INADDR_ANY; // 接收所有接口的组 quint16 multicastPort = 1900; // 组端口,例如用于发现服务的IGMPv2 M-SEARCH if (!socket->bind(QHostAddress::Any, multicastPort)) { qDebug() << "Failed to bind to port " << multicastPort; } ``` 3. **加入组组**: ```cpp if (!socket->joinMulticastGroup(QHostAddress(Q_IPV4_MULTICAST_LOOPBACK), multicastAddress)) { qDebug() << "Failed to join multicast group"; } ``` 4. **准备数据**: ```cpp QByteArray dataToSend = "Your data here"; // 您想要发送数据 ``` 5. **发送数据**: ```cpp qint64 bytesSent = socket->writeDatagram(dataToSend, multicastAddress, multicastPort); if (bytesSent > 0) { qDebug() << "Sent " << bytesSent << " bytes to multicast"; } else { qDebug() << "Failed to send data"; } ``` 6. **处理接收**: 对于接收,由于组通常不保证单向通信,你需要另外设置一个监听器来接收来自其他组成员的数据。 **相关问题--:** 1. QUdpSocket的用途是什么? 2. 如何处理UDP套接字的错误? 3. 组通信中的M-SEARCH是什么?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值