您的位置:首页 > 教育 > 锐评 > QT实现接收JSON格式的UDP数据并解析

QT实现接收JSON格式的UDP数据并解析

2024/10/6 8:34:55 来源:https://blog.csdn.net/qq_38220144/article/details/141021752  浏览:    关键词:QT实现接收JSON格式的UDP数据并解析

一、项目结构如下

二、各文件代码如下

TestUdpRecv.h

#pragma once#include <QtWidgets/QMainWindow>
#include "ui_TestUdpRecv.h"
#include <QUdpSocket>
#include <QHostAddress>
#include <QByteArray>class TestUdpRecv : public QMainWindow
{Q_OBJECTpublic:TestUdpRecv(QWidget *parent = Q_NULLPTR);~TestUdpRecv();public slots:void processPendingDatagrams();private:Ui::TestUdpRecvClass ui;QUdpSocket *m_pUdpSocket;
};

TestUdpRecv.cpp

#include "TestUdpRecv.h"#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>TestUdpRecv::TestUdpRecv(QWidget *parent): QMainWindow(parent), m_pUdpSocket(new QUdpSocket())
{ui.setupUi(this);// 绑定到本地端口,例如8080if (!m_pUdpSocket->bind(QHostAddress("127.0.0.1"), 13383)) {qDebug() << "无法绑定到端口:" << m_pUdpSocket->errorString();}// 连接readyRead信号到自定义的槽函数QObject::connect(m_pUdpSocket, &QUdpSocket::readyRead, this, &TestUdpRecv::processPendingDatagrams);
}TestUdpRecv::~TestUdpRecv()
{}void TestUdpRecv::processPendingDatagrams()
{while (m_pUdpSocket->hasPendingDatagrams()) {QByteArray datagram;datagram.resize(m_pUdpSocket->pendingDatagramSize());QHostAddress sender;quint16 senderPort;m_pUdpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);QJsonDocument jsonDoc = QJsonDocument::fromJson(datagram);// 检查解析是否成功if (jsonDoc.isNull()) {qDebug() << "Failed to parse JSON data.";return;}if (jsonDoc.isArray()) { // 检查是否为数组QJsonArray jsonArray = jsonDoc.array();for (int i = 0; i < jsonArray.size(); ++i) {QJsonObject jsonObject = jsonArray.at(i).toObject();// 从每个对象中提取值QString code = jsonObject["code"].toString();double value = jsonObject["value"].toDouble();QString name = jsonObject["name"].toString();QString time = jsonObject["time"].toString();// 打印或者进一步处理这些值qDebug() << "Code:" << code << ", Value:" << QString::number(value) << ", Name:" << name << ", Time:" << time;}}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com