Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包
生活随笔
收集整理的這篇文章主要介紹了
Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原理以及運行
原理是因為QJsonDocument提供了一個函數toJson
可以直接把Json數據轉成QByteArray,這樣就可以直接發送數據包,然后再按照常規方法解析即可,本源碼中含解析內容,詳細的解析過程在如下的連接中!
?
Qt工作筆記-Qt5 利用QJson從文件讀取Json并解析
https://blog.csdn.net/qq78442761/article/details/84761428
?
發送了json數據,用串口調試工具運行截圖如下:
?
本例子運行動態圖如下:
?
源碼
發送端結構如下:
發送端源碼如下:
widget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE class QUdpSocket; QT_END_NAMESPACEnamespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected slots:void sendMsgToLocal();private:Ui::Widget *ui;QUdpSocket *m_udpSocket; };#endif // WIDGET_Hmain.cpp
#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }widget.cpp
#include "widget.h" #include "ui_widget.h" #include <QUdpSocket> #include <QMessageBox> #include <QHostAddress> #include <QDebug> #include <stdlib.h> #include <QJsonObject> #include <QJsonDocument>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);this->setWindowTitle("Sender");m_udpSocket = new QUdpSocket(this);connect(ui->sendPushButton, SIGNAL(clicked(bool)), this, SLOT(sendMsgToLocal()));}Widget::~Widget() {delete ui; }void Widget::sendMsgToLocal() {//make a Json dataQJsonObject jsonObject;jsonObject.insert("Name", "xiaoming");jsonObject.insert("age", 18);QJsonDocument jsonDocument;jsonDocument.setObject(jsonObject);QByteArray dataArray = jsonDocument.toJson();if(m_udpSocket->writeDatagram(dataArray ,QHostAddress("127.0.0.1"), 7755) == -1){qDebug() << "send UDP data package failed!";} }?
接收端目錄結構如下:
接收端源碼如下:
widget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QByteArray>QT_BEGIN_NAMESPACE class QUdpSocket; QT_END_NAMESPACEnamespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected:void analysisByteArray(QByteArray data);protected slots:void readPendingData();private:Ui::Widget *ui;QUdpSocket *m_udpSocket; };#endif // WIDGET_Hmain.cpp
#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }widget.cpp
#include "widget.h" #include "ui_widget.h" #include <QUdpSocket> #include <QMessageBox> #include <QHostAddress> #include <QDebug> #include <stdlib.h> #include <QJsonObject> #include <QNetworkDatagram> #include <QJsonDocument> #include <QJsonParseError>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);this->setWindowTitle("Receiver");m_udpSocket = new QUdpSocket(this);if(!m_udpSocket->bind(7755)){QMessageBox::information(this, "tip", "bind port failed!");return;}connect(m_udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingData())); }Widget::~Widget() {delete ui; }void Widget::analysisByteArray(QByteArray data) {QJsonParseError json_error;QJsonDocument jsonDoc(QJsonDocument::fromJson(data, &json_error));if(json_error.error != QJsonParseError::NoError){qDebug() << "json error!";return;}QJsonObject rootObj = jsonDoc.object();QStringList keys = rootObj.keys();for(int i = 0; i < keys.size(); i++){if(i == 0)qDebug() << "key" << i << " is:" << keys.at(i) << rootObj.value(keys.at(i)).toString();elseqDebug() << "key" << i << " is:" << keys.at(i) << rootObj.value(keys.at(i)).toInt();}}void Widget::readPendingData() {while(m_udpSocket->hasPendingDatagrams()){QNetworkDatagram datagram = m_udpSocket->receiveDatagram();analysisByteArray(datagram.data());} }?
總結
以上是生活随笔為你收集整理的Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt|C++-最简单的OpenGL(变颜
- 下一篇: Qt文档阅读笔记-QGraphicsIt