【Qt笔记】Qt建立UDP通信

news2025/2/22 10:22:41

目录

一、前言

二、服务端

①在项目配置文件中加入network模板

②创立一个继承自QObject的UdpServer的类

③构造函数的实现

④读取信息函数的实现

三、客户端

①绑定服务端的IP地址和端口号

②发送数据报给服务端

四、实现效果


一、前言

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的、面向报文的、基于网络的传输层协议。

二、服务端

①在项目配置文件中加入network模板

QT       += core gui network

②创立一个继承自QObject的UdpServer的类

UdpServer构造函数用于创建对象时初始化对象

readDatagram函数用于读取客户端发来的信息,并进行相应的操作

#include <QUdpSocket>  
#include <QDebug>  
#include <QBuffer>  
#include <QDataStream>  
  
class UdpServer : public QObject  
{  
    Q_OBJECT  
public:  
    //构造函数
    UdpServer(QObject *parent = nullptr);
  
private slots:  
    //读取客户端发来的信息函数
    void readDatagram();  

private:  
    //udp通信的变量
    QUdpSocket *udpSocket;  
};

③构造函数的实现

bind函数绑定到所有可用的网络接口上的12345端口,其中的QHostAddress::Any参数是所有可用的网络接口,你也可以给具体的IP地址
connect函数是用于连接信号与槽,确保接收到UDP数据报时能够自动调用readDatagram函数

UdpServer::UdpServer(QObject *parent = nullptr)  
    : QObject(parent)
    , udpSocket(new QUdpSocket(this))  
{  
    udpSocket->bind(QHostAddress::Any, 12345);  //绑定到所有可用的网络接口上的12345端口
    connect(udpSocket, &QUdpSocket::readyRead, this, &UdpServer::readDatagram);  //连接信号与槽,确保接收到UDP数据报时能够自动调用readDatagram函数
}

④读取信息函数的实现

使用while循环读取数据报,通过调用hasPendingDatagrams()的方法实现

当有数据报时,声明了一个 QByteArray类型的变量 datagram,用于存储从 UDP 套接字接收到的数据。

调用pendingDatagramSize()方法获取当前待处理数据报的大小

声明了QHostAddress类型的变量senderquint16类型的变量senderPort,它们将用于存储发送数据报的计算机的 IP 地址和端口号

调用readDatagram()方法从udpSocket读取数据报,如果读取失败(例如,套接字关闭或发生错误),它将返回-1

truncate()方法调整datagram的大小以匹配实际读取的字节数

void UdpServer::readDatagram()
{  
    while (udpSocket->hasPendingDatagrams()) {  
        QByteArray datagram;  
        datagram.resize(int(udpSocket->pendingDatagramSize()));  
        QHostAddress sender;  
        quint16 senderPort;  
  
        int bytesRead = udpSocket->readDatagram(datagram.data(), datagram.size(),  
                                                   &sender, &senderPort);  
  
        if (bytesRead == -1) {  
            qDebug() << "Failed to read datagram";  
            continue;  
        }  
  
        datagram.truncate(bytesRead);  
  
        // 假设我们发送的是简单的字符串命令,如"pressKeyA"  
        QString command(datagram);  
        qDebug() << "Received command:" << command << "from" << sender.toString() << ":" << senderPort;  
    }  
}

三、客户端

①绑定服务端的IP地址和端口号

这里服务端的IP地址使用的是本机地址,端口号是前面服务端设置的端口号

QString serverIp = "192.168.1.100"; // 服务端IP地址  
quint16 serverPort = 12345;         // 服务端端口号  

②发送数据报给服务端

message为发送的数据,本文只是举例子,因此只发送了一次,你可以通过循环结构发送或者通过Qt按钮点击发送

QByteArray message = "Hello, Server!";
sendUdpMessage(serverIp, serverPort, message);

四、实现效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

流苏马兜铃Aristolochia fimbriata参考基因组

推荐官网&#xff0c;一个和无油樟一样没发生过全基因组复制事件的代表性物种。 文章同链接 如何获取mostly单拷贝和strictly单拷贝基因 Insights into angiosperm evolution, floral development and chemical biosynthesis from the Aristolochia fimbriata genome https:…

微服务CI/CD实践(一)环境准备及虚拟机创建

微服务CI/CD实践系列&#xff1a; 微服务CI/CD实践&#xff08;一&#xff09;环境准备及虚拟机创建 微服务CI/CD实践&#xff08;二&#xff09;gitlabs部署 微服务CI/CD实践&#xff08;三&#xff09;nexus3部署 微服务CI/CD实践&#xff08;四&#xff09;数据库,redis,n…

天猫商品评论API:获取商品热门评价与最新评价

天猫&#xff08;Tmall&#xff09;作为中国最大的B2C电商平台之一&#xff0c;提供了丰富的商品和服务。然而&#xff0c;天猫并没有直接公开一个通用的API来允许第三方开发者直接获取商品的热门评价或最新评价。这主要是出于保护用户隐私、防止恶意抓取和滥用数据等考虑。 不…

SpringIoCDI

前言&#x1f440;~ 上一章我们介绍了Spring MVC&#xff0c;今天介绍Spring核心功能之一IoC Spring到底是什么&#xff1f; Spring IoC 什么是 IoC 容器&#xff1f; IoC 介绍 DI 介绍 IoC详解 获取Bean对象的其他方式 Bean的存储 方法注解 Bean 扫描路径 DI详解 …

计算机网络——TCP协议与UDP协议详解(下)

一、TCP协议 1.1 TCP协议的报文 TCP全称为 "传输控制协议(Transmission Control Protocol")。人如其名&#xff0c;要对数据的传输进行一个详细的控制。我们先看其报文格式&#xff0c;如下图&#xff1a; TCP报文由以下几个字段组成&#xff1a; 源端口号和目标端口…

【第三版 系统集成项目管理工程师】第13章 监控过程组

持续更新。。。。。。。。。。。。。。。 【第三版】第十三章 监控过程组 13.1控制质量13.1.1主要输入1.项目管理计划-P4992.项目文件-P4993.批准的变更请求-P5004.可交付成果-P5005.工作绩效数据-P500 13.1.2主要工具与技术1.数据收集-P5002.数据分析-P5003.检查-P5014.测试/…

数据结构—— 初识二叉树

1.树概念及结构 1.1树的概念 树是由根和子树构成 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 1. 树有…

安卓设备使用Linux运行Python sklearn进行机器学习. 2024-08-19

0. 测试环境 设备: 国美u7 系统: 安卓7.1(armv8a) 工具软件termux: Termux GitHub linux发行版: archlinux (aarch64) 1. Android手机安装termux (1)下载与安装termux : Releases termux/termux-app GitHub 根据设备处理器和系统框架选择适宜的最新版本. 这里我选择: …

krita安装krita_ai_diffusion插件后没有AI image generation

为krita 安装krita_ai_diffusion插件后却找不到AI image generation&#xff0c; 开始以为是插件安装问题&#xff0c;但发现插件安装是正确的&#xff1b; 既然安装正确&#xff0c;却看不到&#xff0c;应该是设置的问题&#xff0c;折腾了一下&#xff0c;发下是设置-》面板…

如何获取mostly单拷贝和strictly单拷贝基因

参考这篇文章的有意思的分析脚本~ 如何严格定义单拷贝基因的类型&#xff0c;值得思考。 Insights into angiosperm evolution, floral development and chemical biosynthesis from the Aristolochia fimbriata genome https://github.com/yihenghu/Aristolochia_fimbriata_…

数据驱动下的优化渠道管理与决策支持

在当今竞争激烈的市场环境中&#xff0c;渠道管理作为企业连接产品与消费者的重要桥梁&#xff0c;其效率与效果直接关系到企业的市场竞争力和可持续发展能力。随着大数据技术的广泛应用&#xff0c;数据驱动下的优化渠道管理与决策支持正成为企业提升管理效能、精准把握市场脉…

企业网站制作流程,企业网页怎么制作

​企业网站建设&#xff0c;需要对自身的需求进行分析&#xff0c;确定网站的基本功能和定位。这包括确定网站的目标受众、内容类型、功能模块、风格定位等方面。只有明确了需求&#xff0c;才能为后续的网站建设提供指导。 01、网站建设流程 02、网站制作多少钱 一、网站制…

Adobe Audition AU 2023-23.6.6.1 解锁版下载及安装教程(一款优秀的音频处理工具)

前言 Audition是Adobe旗下一款非常好用的音频处理工具&#xff0c;软件为用户们提供了功能强大的音频编辑功能和一个相对完善的工作流程&#xff0c;用户们无论是录制音乐、无线电广播还是视频配音&#xff0c;多音频合成&#xff0c;这款软件都能够给你足够的创作动力。audit…

https://mvnrepository.com cannot access

https://mvnrepository.com 有时候无法访问 1&#xff09;设置下DNS&#xff0c;看下行不行 WLAN DNS proxy settings (Win 10)-CSDN博客 2)或者直接找个链接试一下 https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans https://mvnrepository.com

一、hal库配置0.96寸oled屏幕+tftlcd屏幕演示

一、硬件iic配置&#xff08;使用oled演示&#xff09; 图省事复制即可&#xff08;注意&#xff1a;从机地址0x78或0x7a&#xff09; //初始化 void MX_I2C1_Init(void) {hi2c1.Instance I2C1;hi2c1.Init.ClockSpeed 100000;//标准hi2c1.Init.DutyCycle I2C_DUTYCYCLE_2;/…

如何高效应对团队中的低效程序员?

目录 引言&#xff1a;理解“低效”的真正含义 自我反思&#xff1a;领导者的责任 分析问题根源&#xff1a;环境与流程的影响 行动方案&#xff1a;培训与重新评估 总结&#xff1a;领导力的关键在于共赢 其它视角&#xff1a;中国与西方管理文化的对比 作为Leader&…

渠道管理是什么?一文教你优化渠道管理!

在当今竞争激烈的市场环境中&#xff0c;渠道管理已成为企业实现持续增长和市场份额扩张的关键。本文旨在深入探讨渠道管理的定义、重要性、优化策略及面临的挑战&#xff0c;并为企业提供一套全面的渠道管理优化指南&#xff0c;同时植入关于分销推广系统的广告&#xff0c;助…

websocket的介绍及springBoot集成示例

目录 一、什么是Websocket 二、Websocket特点 三、WebSocket与HTTP的区别 四、常见应用场景 五、SpringBoot集成WebSocket 1. 原生注解 2. Spring封装 一、什么是Websocket WebSocket 是一种在单个 TCP 连接上进行 全双工 通信的协议&#xff0c;它可以让客户端和服务器…

Djangorestframework+Vue搭建前后端分离项目

文章目录 1、Django环境搭建2、安装Vue3、安装ant-design插件4、echarts图标插件5、解决跨域问题 1、Django环境搭建 安装anaconda https://www.anaconda.com/download 打开命令行工具&#xff0c;出现base就表示安装成功了&#xff0c;表示当前的虚拟环境名 创建虚拟环境的p…

Isaac Sim仿真平台学习(2)系统架构

目录 0.前言 1.isaac sim的系统架构 1.Design&#xff08;设计&#xff09; 2.Tune&#xff08;调试&#xff09;和Train&#xff08;训练&#xff09; 1.PhysX 2.RTX 3.Sensors 1.感知型扩展传感器 2.物理传型感器 4.Replicator 5.Digital Twins 6.Omnigraph 7.I…