JSON - 使用cJSON 解析Qt通过UDP发送的JSON数据
1,cJSON支持在C程序中创建和解析JSON数据,其提供多种方法供C程序使用,最直接的是将cJSON.c和cJSON.h加入到C工程中,源代码:https://github.com/DaveGamble/cJSON
2, QJsonObject用于在Qt中创建JSON对象
3,数据传输通过UDP运行
Qt代码如下:
首先在pro文件中加入
QT += network
h文件内容:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include<QtNetwork> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow(); QUdpSocket *sender;
QByteArray byteArray;
private slots:
void on_pushButton_clicked(); private:
Ui::MainWindow *ui;
}; #endif // MAINWINDOW_H
cpp文件内容:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QJsonObject>
#include<QJsonDocument>
#include<QDebug> MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this); sender = new QUdpSocket(this); QJsonObject rectJson;
rectJson.insert("Type","Rectangle");
rectJson.insert("height",);
rectJson.insert("widght",); QJsonDocument rectJsonDoc;
rectJsonDoc.setObject(rectJson);
byteArray = rectJsonDoc.toJson(QJsonDocument::Compact); } MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::on_pushButton_clicked()
{ QHostAddress address;
address.setAddress(QString("192.168.230.140"));
sender->writeDatagram(byteArray.data(),byteArray.size(),
address,);
}
Qt程序通过端口4444,向IP为192.168.230.140的主机发送JSON数据
4,C程序如下:
{
int sock_fd;
char rcv_buff[];
struct sockaddr_in client_addr;
struct sockaddr_in server_addr;
int client_len;
int rcv_num = -;
if ((sock_fd = socket(AF_INET, SOCK_DGRAM,)) < )
{
perror("socket create error\n");
exit();
}
memset(&server_addr,,sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons();
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
client_len = sizeof(struct sockaddr_in);
if (bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in)) < )
{
perror("bind socket error.\n");
exit();
}
while ()
{
/*zero the buff of rvbsm and hvbsm? zhp*/
rcv_num= recvfrom(sock_fd, rcv_buff, sizeof(rcv_buff), , (struct sockaddr*)&client_addr, &client_len);
if (rcv_num>)
{
rcv_buff[rcv_num] = '\0';
printf("rx bsm num = %d\n",rcv_num);
//printf();
printf("%s %u says: %s\n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port),rcv_buff);
//parse_UDP_data(rcv_num,rcv_buff);
if(rcv_buff != NULL)
{
cJSON* pJson = cJSON_Parse(rcv_buff);
if(pJson == NULL)
{
printf("Json Parse failed.\n");
return ;
}
cJSON* pSub1 = cJSON_GetObjectItem(pJson,"Type");
cJSON* pSub2 = cJSON_GetObjectItem(pJson,"height");
cJSON* pSub3 = cJSON_GetObjectItem(pJson,"widght");
if(pSub1!=NULL)
{
printf("Type : %s\n", pSub1->valuestring);
}
if(pSub2!=NULL)
{
printf("height : %d\n", pSub2->valueint);
}
if(pSub3!=NULL)
{
printf("widght : %d\n", pSub3->valueint);
}
}
}
else
{
perror("recv BSM error\n");
break;
}
}
close(sock_fd);
}
编译C程序:gcc -I. -lm -o rencode *.c
由于cJSON使用了标准数学库,所以在编译中需链接其库文件-lm;
在IP为192.168.230.140的linux服务器中执行./rencode
输出结果为:

JSON - 使用cJSON 解析Qt通过UDP发送的JSON数据的更多相关文章
- QT POST/GET 发送/获取网页数据
#include <QNetworkReply> #include <QNetworkRequest> QNetworkAccessManager *m_accessManag ...
- 使用 Qt 获取 UDP 数据并显示成图片
一个项目,要接收 UDP 数据包,解析并获取其中的数据,主要根据解析出来的行号和序号将数据拼接起来,然后将拼接起来的数据(最重要的数据是 R.G.B 三个通道的像素值)显示在窗口中.考虑到每秒钟要接收 ...
- Java中使用org.json和json-lib解析JSON
文章目录 [隐藏] 一.JavaProject中org.json解析JSON 1.JSON的org.son-api下载 1)JSON网址 2)JSON的java解析org.json-api网址 3) ...
- Qt之JSON生成与解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...
- 【转载】Qt之JSON生成与解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...
- 使用cJSON解析JSON
cJSON获取数组元素的每个值 { "operType": 0x5, "field": ["time","matchRule&qu ...
- 使用 Qt 获取 UDP 数据并显示成图片(2)
本文首发于 BriFuture 的 个人博客 在我的前一篇文章 使用 Qt 获取 UDP 数据并显示成图片 中,我讲了如何用 Python 模拟发送数据,如何在 Qt 中高效的接收 UDP 数据包并将 ...
- JSON的简单使用_向前台发送JSON数据
转自:http://www.cnblogs.com/digdeep/p/5574366.html 1.前台页面 <%@ page language="java" conten ...
- .net从网络接口地址获取json,然后解析成对象(一)
整理代码,今天遇到一个问题,就是从一个场景接口获取json,然后解析成对象.之前的时候都好好的,这次返回的json字符串里,由于字符编码的问题,格式上不能转换.一直以为是解析的过程编码有误,试了utf ...
随机推荐
- Cocos2d-x 的“HelloWorld” 深入分析
本节所用Cocos2d-x版本:cocos2d-1.0.1-x-0.12.0 不能免俗,一切都从“HelloWorld!”开始.打开HelloWorld工程,里面有两个文件目录Classes和win3 ...
- iOS 文本属性
http://blog.csdn.net/hello_hwc/article/details/46731991
- access 随机选取数据
access随机读取数时 用order by rnd(id) 发现每次获取的数据顺序都是一致的,必须要加上随机数才可以,如下: Random r = new Random(); ...
- Django中的许可(Permissions)和用户组(Group)
Reference: http://www.cnblogs.com/esperyong/archive/2012/12/20/2826690.html 接着上面的3篇讨论文章,我们阐述了Django中 ...
- xlrd(开excel表格)
打来表格 wb = xlrd.open_workbook('example.xlsx') 选择sheet sh=wb.sheet_by_index(序号) 表格的行数 sh.nrows 选取第m行第n ...
- bzoj3052
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题目大意:自己看看,懒得写 题解:带修改的树上莫队,经典爆评测机的题 代码: #inc ...
- iOS MVVM 前世今生
MVVM,Model-View-ViewModel,一个从 MVC 模式中进化而来的设计模式,最早于2005年被微软的 WPF 和 Silverlight 的架构师 John Gossman 提出.
- [c#]解决方案:需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。
问题详情 如下图所示(部分): 出现该错误,是因为应用程序中需要使用到jquery(现在的web应用程序哪个能离开jquery呢),而目前程序目录中并没有jquery文件,或者有jquery文件但是程 ...
- dp中表示无限取的写法
dp[i][j]=dp[i-a[i][j]+dp[i-a[i]][j-1]; 其中前一项j不变表示j这一项无限取
- 互信息应用于SNP特征选择的局限
互信息已广泛应用于特征选择问题,但应用在 SNP 选择上还存在着一些局限.第一,互信息只能衡量一个 SNP 组合与表型的相关性, 无法衡量多个 SNP 与表型的相关性.第二, 利用互信息排序 SNP ...