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数据的更多相关文章

  1. QT POST/GET 发送/获取网页数据

    #include <QNetworkReply> #include <QNetworkRequest> QNetworkAccessManager *m_accessManag ...

  2. 使用 Qt 获取 UDP 数据并显示成图片

    一个项目,要接收 UDP 数据包,解析并获取其中的数据,主要根据解析出来的行号和序号将数据拼接起来,然后将拼接起来的数据(最重要的数据是 R.G.B 三个通道的像素值)显示在窗口中.考虑到每秒钟要接收 ...

  3. Java中使用org.json和json-lib解析JSON

    文章目录  [隐藏] 一.JavaProject中org.json解析JSON 1.JSON的org.son-api下载 1)JSON网址 2)JSON的java解析org.json-api网址 3) ...

  4. Qt之JSON生成与解析

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...

  5. 【转载】Qt之JSON生成与解析

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...

  6. 使用cJSON解析JSON

    cJSON获取数组元素的每个值 { "operType": 0x5, "field": ["time","matchRule&qu ...

  7. 使用 Qt 获取 UDP 数据并显示成图片(2)

    本文首发于 BriFuture 的 个人博客 在我的前一篇文章 使用 Qt 获取 UDP 数据并显示成图片 中,我讲了如何用 Python 模拟发送数据,如何在 Qt 中高效的接收 UDP 数据包并将 ...

  8. JSON的简单使用_向前台发送JSON数据

    转自:http://www.cnblogs.com/digdeep/p/5574366.html 1.前台页面 <%@ page language="java" conten ...

  9. .net从网络接口地址获取json,然后解析成对象(一)

    整理代码,今天遇到一个问题,就是从一个场景接口获取json,然后解析成对象.之前的时候都好好的,这次返回的json字符串里,由于字符编码的问题,格式上不能转换.一直以为是解析的过程编码有误,试了utf ...

随机推荐

  1. c++ builder 2009如何生成独立运行exe(转)

    参考资料:https://forums.codegear.com/thread.jspa?threadID=13559&tstart=703 查了很多网站资料,说得差不多,但是最后编译出来的还 ...

  2. 02 easyui -parser

    parser: 页面节点class=“easyui-” +组件名(在plugins里) ,则可以 渲染成相应的组件.

  3. sqlserver 脚本方式导出数据到excel

    use EntDataCenter go SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- =========================== ...

  4. leetcode day4

    [171]Excel Sheet Column Number Given a column title as appear in an Excel sheet, return its correspo ...

  5. Angular - - $templateCache 和 $templateRequest

    $templateCache 第一次使用模板,它被加载到模板缓存中,以便快速检索.你可以直接将模板标签加载到缓存中,或者通过$templateCache服务. 通过script标签: <scri ...

  6. tomcat 错误查看

    路径 : \tomcat\logs 清除日志,重新启动生成 从上到下,依次查看错误,可以看到,上面的两个是系统的启动模块.然后第三行错误提示,明显指出了错误原因 “NoClassDefFoundErr ...

  7. 超棒的30款JS类库和工具

    http://www.csdn.net/article/2013-07-01/2816068-best-javascript-libraries-and-tools

  8. 理解FMS中的实例

    FMS服务器端安装后,唯一需要注意的是设置端口,默认的访问端口是1935和80,如果服务器上安装了IIS提供 WEB服务,那么需要将80修改为其他端口如8080,否则,IIS将会无法工作.如果愿意,也 ...

  9. ASP.NET 页面之间传值的几种方式

    开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...

  10. 游戏开发之在UE4中编写C++代码控制角色

    当你运行我们上次做完的项目,你可能会意识到我们移动的摄像机还是默认的那个摄像机,这个默认的摄像机可以自由飞翔.这一节,我们要使得开始的角色是我们的一个Avatar类的实例对象,并且使用键盘控制我们的角 ...