news 2026/6/15 12:18:36

QUdpSocket---单播

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QUdpSocket---单播

Qt发个UDP消息,实打实得就两步:

1)创建QUdpSocket

2)发消息

就是这么滴简单,相比纯用C/C++来写,简直简化了太多。

01 搞个UDP服务

void DialogUdpSocket::startUdpServer() { server_ = new QUdpSocket(this); connect(server_, &QUdpSocket::readyRead, this, [this]{ auto datagram = server_->receiveDatagram(); ui->plainTextEdit_serv->appendPlainText( QString("recv ip:%1 port:%2 msg:%3") .arg(datagram.senderAddress().toString()) .arg(datagram.senderPort()) .arg(QString(datagram.data())) ); //回复 QNetworkDatagram d; d.setDestination(datagram.senderAddress(), datagram.senderPort()); d.setData("收到!"); server_->writeDatagram(d); }); connect(server_, QOverload<QAbstractSocket::SocketError>::of(&QUdpSocket::error), this, [](QAbstractSocket::SocketError err){ qDebug() << err; }); bool ret = server_->bind(QHostAddress::AnyIPv4, 8888); ui->plainTextEdit_serv->appendPlainText(QString("端口绑定结果:%1").arg(ret?"成功":"失败")); ui->plainTextEdit_serv->appendPlainText(QString("本地端口:%1").arg(server_->localPort())); }

程序一运行就调用这个函数启动UDP服务,看代码是写了这么多,关键就两步,

server_ = new QUdpSocket(this);

创建UDP

server_->bind(QHostAddress::AnyIPv4, 8888);

绑定到本地IP的8888端口上

其它都是打辅助,草丛中插眼的。

这个UDP服务主要干一件事情:

收到消息回OK:

1、连接readyRead信号,有消息过来时,这个信号就会触发。

2、receiveDatagram() 读取消息的内容,包括发送者的ip、端口信息。

3、然后回复它“收到!”就完了。

02 无连接udp

//客户端发送 void DialogUdpSocket::on_pushButton_send_clicked() { //创建 if(client_ == nullptr) { client_ = new QUdpSocket(this); connect(client_, &QUdpSocket::readyRead, this, [this]{ auto datagram = client_->receiveDatagram(); ui->plainTextEdit_client->appendPlainText( QString("serv reply: %1").arg(QString(datagram.data())) ); }); connect(client_, &QUdpSocket::stateChanged, this, [](QAbstractSocket::SocketState socketState){ qDebug() << socketState; }); } //发送一个消息 QString msg = ui->lineEdit_send->text(); client_->writeDatagram(msg.toUtf8(), QHostAddress::LocalHost, 8888); ui->plainTextEdit_client->appendPlainText(QString("send msg: %1").arg(msg)); }

1)创建一个QUdpSocket

2) writeDatagram 发送消息给上面的UDP服务

看下咱们做好的示例:

代码本豆故意连接stateChanged信号

看下它的打印:

就是说,

虽然我们没给客户端udp做端口绑定,

但是客户端在发消息会自动绑定一个端口。

示例中是绑定到52040端口上了,

这是系统随机给udp分配的一个可用端口。

作为一个发送客户端,

通常情况下还真就不需要显式绑定端口,

需要显式绑定的一般是服务端。

总不能让服务端的端口随机绑定吧,

那客户端在这六万个端口里可不知道,

哪个是自家的服务了。

03 有连接udp

把前面的客户端代码改改:

改动一:创建好socket后直接去连接服务端

改动二:用write发送消息

看看还能不能发送消息:

眉毛冰!

有连接的UDP,

1)显而易见的好处:

发消息时就不用再去指定目标IP和端口!

2)还有个好处是:

它能略微提升些性能!

首先需要说明的是,

UDP的连接只是虚拟的连接,

或者叫逻辑上的连接,

与服务端并无真实连接。

逻辑连接是让系统记录下通信双方,

节省系统对IP和端口的解析流程,

还能过滤掉无关数据包,减少无效数据的处理。

举个栗子:

TFTP是简单文件传输协议,

使用UDP进行传输。

所以在TFTP协议下收发文件,

用有连接的方式稳定性和效率上会更高些。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 19:00:24

生成式AI辅助漏洞分析:软件测试者的双刃剑

一、技术革命&#xff1a;AI如何重构漏洞分析范式 1.1 效率维度突破 自动化漏洞模式识别 案例&#xff1a;DeepScan AI通过语义分析在金融系统代码库中3小时内识别412处潜在注入漏洞&#xff0c;人工团队需72人时&#xff08;2025年Gartner测试报告&#xff09; 智能测试用例生…

作者头像 李华
网站建设 2026/6/10 13:04:26

端到端安全测试策略全景图

测试从业者面临的三大挑战漏洞滞后性&#xff1a;传统测试中安全环节后置&#xff0c;75%漏洞在投产前未被发现工具孤岛&#xff1a;SAST/DAST/IAST工具独立运行&#xff0c;扫描覆盖盲区达32%协作断层&#xff1a;开发/测试/安全团队需求理解偏差率超40%四维策略框架构建graph…

作者头像 李华
网站建设 2026/6/15 11:49:12

[Windows] BiliTools v1.4.7 B站视频下载工具

[Windows] BiliTools v1.4.7 B站视频下载工具 链接&#xff1a;https://pan.xunlei.com/s/VOhURGkgMRujDdmMR4e0UHeUA1?pwd2394# BiliTools v1.4.7 是一款开源免费的 B 站视频下载工具&#xff0c;核心支持 8K 超清视频下载、音频提取、弹幕保存等实用功能&#xff0c;还能一…

作者头像 李华
网站建设 2026/6/15 11:51:11

大脑能力32岁才达巅峰!Cell和Nature子刊:一生有4个转折点,32岁正值高效“换挡”期,但内分泌率先失守,开始断崖式衰老

大脑能力32岁才达巅峰&#xff01;Cell和Nature子刊&#xff1a;一生有4个转折点&#xff0c;32岁正值高效“换挡”期&#xff0c;但内分泌率先失守&#xff0c;开始断崖式衰老 原创 木白 梅斯医学 2025年12月23日 07:50 上海 要说有什么话题&#xff0c;能不分国界、不论年龄…

作者头像 李华
网站建设 2026/6/15 11:47:13

天池大赛获奖选手偏爱TensorFlow的原因分析

天池大赛获奖选手为何偏爱 TensorFlow&#xff1f; 在近年来的高水平数据科学竞赛中&#xff0c;一个现象逐渐清晰&#xff1a;尽管 PyTorch 在学术圈风头正劲&#xff0c;但在诸如阿里云天池这类强调“可落地、能部署”的实战型赛事中&#xff0c;TensorFlow 依然是许多冠军团…

作者头像 李华