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

Qt中对Udp数据打包发送和接收

有些小伙伴对怎么对Udp的数据打包不太清楚。下面我举例说明。

比如我们要发送一个Person的数据。可以先用一个结构把Person的数据封装。

struct Person {QString name;int age;
};

下面是udp客户端和服务器端完整的代码例子。


#ifndef UDPCLIENT_H
#define UDPCLIENT_H#include <QObject>
#include <QUdpSocket>struct Person {QString name;int age;
};class UdpClient : public QObject
{Q_OBJECT
public:explicit UdpClient(QObject *parent = nullptr);void sendDatagram(const QByteArray &data);private slots:void readPendingDatagrams();private:void processDatagram(const QNetworkDatagram &datagram);QUdpSocket *udpSocket;
};#endif // UDPCLIENT_H#include "UdpClient.h"
#include <QDataStream>
#include <QNetworkDatagram>UdpClient::UdpClient(QObject *parent) : QObject(parent) {udpSocket = new QUdpSocket(this);udpSocket->bind(QHostAddress::LocalHost, 1235);connect(udpSocket, &QUdpSocket::readyRead, this, &UdpClient::readPendingDatagrams);
}void UdpClient::sendDatagram(const QByteArray &data) {udpSocket->writeDatagram(data, QHostAddress::LocalHost, 1234);
}void UdpClient::readPendingDatagrams() {while (udpSocket->hasPendingDatagrams()) {QNetworkDatagram datagram = udpSocket->receiveDatagram();processDatagram(datagram);}
}void UdpClient::processDatagram(const QNetworkDatagram &datagram) {QByteArray data = datagram.data();// Here you would process the dataQDataStream stream(data);Person person;stream >> person.name >> person.age;// 现在你可以使用 person 结构中的数据qDebug() << "Received person: " << person.name << ", " << person.age;
}#ifndef UDPSERVER_H
#define UDPSERVER_H#include <QObject>
#include <QUdpSocket>class UdpServer : public QObject
{Q_OBJECT
public:explicit UdpServer(QObject *parent = nullptr);private slots:void readPendingDatagrams();private:void processDatagram(const QNetworkDatagram &datagram);QUdpSocket *udpSocket;
};#endif // UDPSERVER_H#include "UdpServer.h"#include <QNetworkDatagram>UdpServer::UdpServer(QObject *parent) : QObject(parent) {udpSocket = new QUdpSocket(this);udpSocket->bind(QHostAddress::LocalHost, 1234);connect(udpSocket, &QUdpSocket::readyRead, this, &UdpServer::readPendingDatagrams);
}void UdpServer::readPendingDatagrams() {while (udpSocket->hasPendingDatagrams()) {QNetworkDatagram datagram = udpSocket->receiveDatagram();processDatagram(datagram);}
}void UdpServer::processDatagram(const QNetworkDatagram &datagram) {QByteArray data = datagram.data();// Here you would process the data// ...//qDebug() << "Received data from client: " << data.toStdString().c_str();// Sending a response back to the senderudpSocket->writeDatagram(data, datagram.senderAddress(), datagram.senderPort());
}#include <QCoreApplication>
#include <QDataStream>
#include "UdpServer.h"
#include "UdpClient.h"int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);UdpServer server;UdpClient client;Person person;person.name = "Alice";person.age = 30;QByteArray datagram;QDataStream stream(&datagram, QIODevice::WriteOnly);stream << person.name << person.age;client.sendDatagram(datagram);return a.exec();
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 已知CSIDL常量值,求其对应路径。
  • ImportError: cannot import name ‘HTTPClientFactory‘ from ‘twisted.web.client‘
  • k8s、数据存储
  • 【数据结构】Lambda
  • 【C++】单例模式
  • 9 mysql调优
  • 大数据毕业设计选题推荐-智慧消防大数据平台-Hadoop-Spark-Hive
  • 带你走进Cflow (三)·控制符号类型分析
  • el-table 多表格弹窗嵌套数据显示异常错乱问题
  • asp.net core mvc之 视图
  • 【 云原生 | K8S 】kubectl 详解
  • ChatGPT Plus的Vision升级是一个改变游戏规则的创举
  • 比较PID控制和神经网络控制在机器人臂上的应用
  • Facebook广告被暂停是什么原因?广告账号被封怎么办?
  • 利用 Google Artifact Repository 构建maven jar 存储仓库
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • CODING 缺陷管理功能正式开始公测
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • GitUp, 你不可错过的秀外慧中的git工具
  • gulp 教程
  • JS字符串转数字方法总结
  • spring boot 整合mybatis 无法输出sql的问题
  • Spring Boot快速入门(一):Hello Spring Boot
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Unix命令
  • Vue--数据传输
  • zookeeper系列(七)实战分布式命名服务
  • 包装类对象
  • 聚簇索引和非聚簇索引
  • 力扣(LeetCode)22
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端自动化解决方案
  • 数组大概知多少
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #includecmath
  • (7)摄像机和云台
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (八)c52学习之旅-中断实验
  • (六)Flink 窗口计算
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (原创)可支持最大高度的NestedScrollView
  • (转)Sql Server 保留几位小数的两种做法
  • (转载)(官方)UE4--图像编程----着色器开发
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .Net 4.0并行库实用性演练
  • .Net CF下精确的计时器
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net mvc 获取url中controller和action
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .net6使用Sejil可视化日志
  • .Net各种迷惑命名解释