当前位置: 首页 > article >正文

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

大纲

  • 概述
  • 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界面拖入一个label 用来显示接收广播信息
    其槽函数如下
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接收器,并将其绑定到指定的端口号上。同时,将接收到新数据报的信号与处理数据报的槽函数连接起来,以便在接收到新数据报时能够及时处理。
*/
//sender.cpp 发送端
#include "sender.h"
#include "ui_sender.h"
#include <QtNetwork>
Sender::Sender(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Sender)
{
    ui->setupUi(this);
    sender= new QUdpSocket(this);
}

Sender::~Sender()
{
    delete ui;
}

void Sender::on_pushButton_clicked()
{
    QByteArray datagram = "hello world";
    sender->writeDatagram(datagram.data(),datagram.size(),
                          QHostAddress::Broadcast,45454);
}

演示

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


http://www.kler.cn/a/13713.html

相关文章:

  • Python函数 — 递归函数
  • jmeter的界面介绍
  • 微信小程序从零开始经验贴(含详细资料及链接)
  • vite的环境变量配置详解
  • Docker常用命令详解,有这些足够了
  • Prometheus+node_exporter+Grafana+夜莺 监控部署
  • 春秋云境:CVE-2022-28060(SQL注入)
  • 瀚高股份吕新杰:创新开源双驱动,躬耕国产数据库
  • NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
  • 图形学大纲
  • 3.5 方程组的状态与解的迭代改善
  • Python爬虫
  • 设计模式取舍之道:代码复杂度权衡
  • Mac电脑安装apktool工具包
  • java中Math函数使用
  • 软件工程——软件危机
  • 【AI生产力工具】ChatPDF:将 PDF 文档转化为交互式阅读体验的利器
  • C++ STL常用方法概述
  • 当ChatGPT遇上StableDiffusion ChatGPT指导StableDiffusion绘画
  • javaweb学生在线考试系统dzkf10程序