Qt网络编程 (udp广播和接收例)

news/2024/11/16 11:28:21/

大纲

  • 概述
  • sender
  • receiver
  • 演示

概述

使用两个项目

  • 1 sender 用来广播"hello world";
  • 2 receiver 用来接收广播信息

sender

  • 1 创建Qdialog类
  • 2 在sender.pro 中添加 QT +=network 一行代码
  • 3 在sender.h 中声明类
    • class QUdpSocket;
    • 在声明一个私有对象
    • QUdpSocket *sender;
  • 4 在ui界面拖入一个按钮 用来触发广播信息
    其槽函数如下
void Sender::on_pushButton_clicked()
{QByteArray datagram = "hello world";sender->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,45454);
}
/*
首先,定义了一个QByteArray类型的变量datagram,其中存储了字符串"hello world"的字节流。然后,调用了sender对象的writeDatagram函数,该函数用于发送UDP数据报。具体参数含义如下:datagram.data():获取datagram的数据指针,用于发送数据。datagram.size():获取datagram的数据大小,用于指定发送数据的长度。QHostAddress::Broadcast:指定目标主机地址为广播地址,表示将数据发送给局域网内的所有主机。45454:指定目标主机端口号,表示将数据发送到该端口号对应的进程。总体来说,这段代码的作用是向局域网内的所有主机发送一个UDP数据报,数据内容为"hello world"。
*/

在sender.cpp 构造函数中添加

 sender= new QUdpSocket(this);

receiver

  • 1 创建Qdialog类
  • 2 在receiver.pro 中添加 QT +=network 一行代码
  • 3 在receiver.h 中声明类
    • class QUdpSocket;
    • 在声明一个私有对象
      • QUdpSocket *sender;
    • 添加一个私有槽函数
      • private slots:
      • void processPendingDatagram();
  • 4 在ui界面拖入一个leble 用来显示接收广播信息
    其槽函数如下
void Receiver::processPendingDatagram(){while(receiver->hasPendingDatagrams()){QByteArray datagram;datagram.resize(receiver->pendingDatagramSize());receiver->readDatagram(datagram.data(),datagram.size());ui->label->setText(datagram);}
}
  • 5绑定
 receiver->bind(45454,QUdpSocket::ShareAddress);connect(receiver,&QUdpSocket::readyRead,this,&Receiver::processPendingDatagram);
/*这段代码是一个初始化和连接信号和槽的操作。首先,调用了receiver对象的bind函数,该函数用于将接收端口绑定到45454端口上,并且设置了QUdpSocket::ShareAddress选项,表示该端口可以被多个进程共享。然后,使用connect函数将receiver对象的readyRead信号与当前对象(Receiver类的实例)的processPendingDatagram槽函数连接起来。readyRead信号表示接收到新的数据报,而processPendingDatagram槽函数用于处理接收到的数据报。总体来说,这段代码的作用是初始化一个UDP接收器,并将其绑定到指定的端口号上。同时,将接收到新数据报的信号与处理数据报的槽函数连接起来,以便在接收到新数据报时能够及时处理。
*/

演示

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/44133.html

相关文章

TikTok和国产抖音的发展路径和趋势

鑫优尚电子商务:以历史为镜子,我们可以知道变化。 纵观TikTok和国产抖音,我们会发现TikTok目前的发展路径和趋势与国产抖音的主线十分相似,直播也是如此。鑫优尚电子商务 国内抖音直播一般经历过四个时代:直播1.0时代…

Torch 入门教程

文章目录Torch 入门教程Torch 的基础知识torch和PyTorch什么区别?TensorAutogradOptimizer举例一模型定义模型训练模型保存和加载模型评估举例二数据载入模型定义和训练模型测试总结Torch 入门教程 这是一篇针对 Torch 框架的入门教程,主要介绍 Torch 的…

springcloud-openFeign简单梳理

OpenFeign openFeign是springcloud中,服务间进行调用的常用方式。了解它,可以更好的处理服务间调用问题。 EnableFeignClients Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) Documented Import(FeignClientsRegistrar.class) public …

3、Web前端学习规划:CSS - 学习规划系列文章

CSS作为Web前端开发的第2种重要的语言,笔者建议在学了HTML之后进行。CSS主要是对于HTML做一个渲染,其也带了一些语言语法函数,功能也非常强大。 1、 简介; CSS(层叠样式表)是一种用于描述网页样式的语言。它可以控制网页中的字体、…

ERTEC200P-2 PROFINET设备完全开发手册(5-3)

5.3 标识和维护数据(I&M) 标识和维护数据是一类特殊的数据记录,其中 “I&M0”(“16#AFF0”)用于有关模块或设备的常规信息。包含的信息例如:订货号/Order-ID, 硬件软件版本/hard- and software v…

pandas笔记:offset.DateOffset

进行date的偏移 class pandas.tseries.offsets.DateOffset 1 参数说明 n 偏移量表示的时间段数。 如果没有指定时间模式,则默认为n天。 normalize是否将DateOffset偏移的结果向下舍入到前一天午夜**kwds 添加到偏移量的时间参数 年(years&#xff09…

Linux复习 / 动静态库QA梳理 | 如何使用第三方库?

文章目录前言Q&A概念Q:使用静态库和使用动态库的程序有什么区别?Q:什么是静态链接/动态链接?使用与制作Q:如何制作动静态库?Q:如何使用第三方库?Q:程序加载时&#x…

Web 技术标准组织

个人博客 授人以鱼不如授人以渔. 所谓“一流的企业制定标准,二流的企业申请专利,三流的企业兜售产品”,这种说法虽不中亦不远。 追求专业精神的 IT 从业者不能只埋首于眼前的一亩三分地,被动承受变化,而要溯流而上&…