QUdpSocket 编程注意事项

概念:

UDP是无连接的用户数据报协议,不能保证数据的全部被对方收到。

发送端,接收端数据收发流程:

发送端示例代码:

QUdpSocket *udpSocket = new QUdpSocket(this);
QByteArray datagram = "UDP Datagram message ";
udpSocket->writeDatagram(datagram, QHostAddress("169.254.254.11"), 36529);

接收端示例代码:

 void Server::initSocket()
 {
     udpSocket = new QUdpSocket(this);  
     udpSender->bind(QHostAddress(localIP),36529, QUdpSocket::ShareAddress);

     connect(udpSocket, &QUdpSocket::readyRead,
             this, &Server::readPendingDatagrams);
 }

 void Server::readPendingDatagrams()
 {
     while (udpSocket->hasPendingDatagrams()) {
         QNetworkDatagram nd = udpSender->receiveDatagram();
        statusLabel->setText(tr("Received datagram:\n \" %1 \" \n"
                                "Sender IP:%2 port:%3" "\n"
                                "Local  IP:%4 port:%5"
                                "").arg(nd.data().constData()).arg(nd.senderAddress().toString()).arg(nd.senderPort()).arg(nd.destinationAddress().toString()).arg(nd.destinationPort()));

     }
 }

QNetworkDatagram 网络数据包类

QByteArray data() const //UDP实际数据
QHostAddress destinationAddress() const //对接收方来说,返回发送方的网络地址
int destinationPort() const //对接收方来说,返回发送方的网络地址

运行结果:

在这里插入图片描述

遇到的坑:
发送端发出的UDP报文,接收端无法接收,通过抓包显示“端口不可达”,
如图所示,在这里插入图片描述
该问题总结如下:
1.对应的UDP端口,没有开机UDP服务。
2.发送端的端口与接收端的端口不一致。

源代码下载

参考资料:
参考文章1
[Qt 的官方示例代码]
C:\Qt\Examples\Qt-5.15.0\network\broadcastsender
C:\Qt\Examples\Qt-5.15.0\network\broadcastreceiver

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值