Qt Socket Server 收发JSON

QT UDP通信接受发送数据 首先在.pro文件中加入 QT +=network;1.建立socket。1.建立Socket。 阅读详情

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点点击下文末的广告,感谢~

之前文章写过Linux C Socket 收发Json数据,最近用Qt Server实现了一遍。给我自己的感觉就是cJSON接口与Qt封装的一些接口是共通的:Qt 封装了QJsonObject来对Json对象操作,如增删改查;封装了QJsonDocument来进行一些序列化与反序列化的操作(可能不准确)。

重要消息:虽然明天是端午节,但是还是要去公司学习。。。

后续可能会在公众号中写一点儿理财相关的知识,待定中......

 

程序中用到了Qt 的Socket Server,但主要介绍下Qt中如何操作Json数据,将接收到的字节流转换为Json对象,又如何将Json对象转换为字节流。

 

一、 程序介绍

 

1. Json 操作相关函数

 

为了与C语言写的对比,同样写了3个函数:

Qt :

int ParseRecvJsonData(const  QByteArray &recvdata, int *outLogLevel);
int WriteLogLevelToFileJson(const QString &filePathName, const int logLevel);
int CreateRespondInfoJson(QByteArray *respondInfoJson, 
                          const  QByteArray &recvJsonData,
                          const int writeFileRet);

      C:

int ParseRecvJsonData(const char * recvdata, int *outLogLevel);
int WriteLogLevelToFileJson(const char *filePathName, int logLevel);
int CreateRespondInfoJson(char *respondInfoJson, 
                          const char* recvJsonData,
                          const int writeFileRet);

解析Json字节流为Json对象,提取所需信息

将所需信息组装成Json对象写入配置文件

将字节流转换为Json对象并添加数据,组装成响应信息

2. Qt 中对Json操作的具体实现

直接加注释进行说明

int TcpServerRecvImage::CreateRespondInfoJson(QByteArray *respondInfoJson,
               const QByteArray &recvJsonData, const int writeFileRet)
{
//使用QJsonDocument判断字节流能否转成Json对象
    QJsonParseError jsonError;
    QJsonDocument jsonRecvData(QJsonDocument::fromJson(recvJsonData, &jsonError));


    if(jsonError.error != QJsonParseError::NoError)
    {
        qDebug() << "parse json error!";
        return -1;
    }
//通过QsonDocument将字节流转为Json对象
    QJsonObject rootObject = jsonRecvData.object();
//向Json对象中追加数据
    rootObject.insert("Result","FAIL");


    if(0 == writeFileRet)
    {
//修改对应数据;可以思考下是如何实现修改前与修改后数据所占空间不同
        rootObject["Result"] = "SUCCESS";
    }
//将Json对象转换为字节流
    QJsonDocument documentJson;
    documentJson.setObject(rootObject);
    QByteArray bytearrayJson = documentJson.toJson();


    respondInfoJson->clear();
    respondInfoJson->append(bytearrayJson);


    return 0;
}


int TcpServerRecvImage::WriteLogLevelToFileJson(const QString &filePathName,
                           const int logLevel)
{
//Qt文件操作
    QFile f(filePathName);
    if(!f.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        qDebug() << "Open failed.";
        return -1;
    }


    // create JSON Object
    QJsonObject logLevelJson;
    logLevelJson.insert("logLevel",QString::number(logLevel));


    QJsonDocument documentJson;
    documentJson.setObject(logLevelJson);
    QByteArray bytearrayJson = documentJson.toJson();
//使用QTextStream,简化文件操作
    QTextStream txtWrite(&f);
    txtWrite << bytearrayJson;


    f.close();


    return 0;
}

3. 程序效果

客户端程序是之前的C语言写的

4. 一点感想

最近一段时间的状态就是不断看书,写Demo程序,并将以前看的一些知识结合起来,不断提炼总结,有一种这就是我想要的生活的错觉;

 

数据结构如何应用在程序中呢?

应用程序如何变得更强壮呢?

 

如需完整工程可在公众号后台留言:

Qt/C++实现JsonRPC over TCP:构建高效跨平台桌面应用通信框架 远程过程调用(RPC)是实现分布式系统或进程间通信的核心技术,它允许程序像调用本地函数一样执行远程服务。其原理是通过网络协议封装调用请求,传输到服务端执行后返回结果,从而屏蔽底层网络细节。在C++/Qt桌面应用开发中,RPC技术能有效解耦前后端逻辑,提升代码可维护性。JsonRPC作为一种基于JSON的轻量级RPC协议,凭借其人类可读、标准规范的优势,成为跨平台通信的理想选择。结合TCP提供的可靠字节流传输,可构建稳定高效的通信通道。本文通过**Qt元对象系统**和**TCP消息边界处理**等关键技术,详细 阅读详情

相关推荐

Qt TCP通信实战:从基础到高级优化

TCP协议作为传输层核心协议,通过三次握手建立可靠连接,采用滑动窗口机制实现流量控制,是网络通信的基石。在跨平台开发中,Qt框架的TCP实现通过封装原生套接字API,提供了统一的跨平台编程接口。其事件驱动模型与QTCPSocket、QTCPServer等核心类的组合,能有效支撑从简单数据传输到高并发服务的各类场景。特别是在物联网和分布式系统中,结合心跳检测、断点续传等机制,可构建稳定的长连接通信。通过调整缓冲区大小、启用TCP_NODELAY等参数优化,配合多线程模型,能显著提升吞吐量。本文以Qt网络模块为

weixin_30824599的博客 375

WebSocket 测试工具

WebSocket 测试工具

ideal-lingyun 1万+

C++/Qt实现SignalR客户端:实时通信与WebSocket协议解析

实时Web通信技术是现代应用开发的核心需求之一,它允许服务器与客户端之间建立持久连接,实现数据的双向实时推送。其底层原理通常基于WebSocket协议,该协议在TCP连接之上提供了全双工通信能力,相比传统的HTTP轮询,显著降低了延迟和服务器负载。这项技术的核心价值在于能够构建高响应性的应用,如实时聊天、金融行情推送、物联网仪表盘和在线协作工具。在工程实践中,开发者需要处理连接管理、心跳保活、断线重连和消息序列化等关键环节。对于C++和Qt开发者而言,虽然SignalR原生支持.NET和JavaScript

440

qt socket 发送json数据

【代码】qt socket 发送json数据。

qq_54600953的博客 1058

STM32F407 + ESP8266 + QT:3步实现智慧农业数据可视化监控

本文详细介绍了如何利用STM32F407、ESP8266和QT构建智慧农业系统,实现温室环境数据的实时监控与可视化。通过硬件架构设计、无线数据传输协议和QT上位机开发三个关键步骤,帮助用户快速搭建高效可靠的农业监控解决方案,提升农作物管理的精准度和效率。

weixin_33882452的博客 569

Qt网络编程实战:用Socket实现一个简易局域网聊天室(附完整源码)

本文详细介绍了如何使用Qt框架和Socket技术构建一个高可用的局域网聊天室。通过模块化设计和TCP/UDP混合协议,实现即时通讯功能,并涵盖工程化实践、性能优化及安全加密等高级特性。附完整源码,适合开发者快速掌握Qt网络编程的核心技术。

weixin_30367873的博客 443

Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容,详细的解析过程在如下的连接中!   Qt工作笔记-Qt5 利用QJson从文件读取Json并解析 https://blog.youkuaiyun.com/qq78442761/article/det...

IT1995的博客 1万+

嵌入式中利用QT实现服务器与客户端方法

TCP通信必须建立TCP连接,通信端分为客户端和服务端。服务端通过监听某个端口来监听是否有客户端连接进来,如果有连接则建立新的socket连接;客户端通过ip和port连接服务端,当成功建立连接之后,就可以进行数据的收发了。在QT中,把socket当成输入输出流来对待,数据收发是通过read()和write()进行的。在进行TCP通信的时候,基本的流程是先获取本地IP地址。创建一个tcpSocket套接字,一个tcpServer服务端。点击监听本地主机IP地址和端口,同时等待服务端的连接。

嵌入式技术开发 769

QwebSocket即时通信

最近因为项目原因。准备前后端进行分离。所有的接口全部通过websocket进行交互。 所以干脆先试写一个demo。 使用websocket进行通信。需要有服务端和客户端。(客户端和服务端是2个独立程序) 客户端 客户端只负责发消息和接受消息。 .h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPushButton> #include <QLineEdit> #include <QT

家俊的博客 1435

解构LOL数值平衡:从基础公式到实战决策的深层逻辑

本文深入解析了《英雄联盟》数值平衡的底层逻辑,从基础攻击力公式到经济系统设计,揭示了MOBA游戏背后的精密数学架构。通过实战案例展示护甲减伤、技能伤害建模等核心机制,探讨装备定价与战斗节奏的数值关联,帮助玩家理解版本更新中的平衡艺术。

weixin_42540248的博客 347

别再花钱买商业软件了!这4款免费DIC工具,从散斑生成到应变分析全搞定

本文介绍了4款免费开源的DIC(数字图像相关技术)工具,涵盖从散斑生成到应变分析的全流程,帮助用户零成本构建专业级DIC工作流。这些工具在精度、算法透明度和生态整合方面具有优势,适用于材料力学和实验力学研究,可替代昂贵的商业软件。

weixin_42525369的博客 169

cjson读取json文件_Qt Socket Server 收发JSON

之前文章写过Linux C Socket 收发Json数据,最近用Qt Server实现了一遍。给我自己的感觉就是cJSON接口与Qt封装的一些接口是共通的:Qt 封装了QJsonObject来对Json对象操作,如增删改查;封装了QJsonDocument来进行一些序列化与反序列化的操作(可能不准确)。重要消息:虽然明天是端午节,但是还是要去公司学习。。。 后续可能会在公众号中写一点儿理财相...

weixin_39812465的博客 230

CXL技术入门:从PCIe到高性能计算的桥梁(附最新2.0协议解析)

本文深入解析CXL技术如何作为PCIe的进化版,成为高性能计算的关键桥梁,特别聚焦CXL 2.0协议的关键升级。从技术架构、三大子协议到典型应用场景,全面介绍CXL在缓存一致性、内存共享等方面的优势,帮助开发者快速掌握这一前沿技术。

wdx012345的博客 728

Linux Socket 收发Json

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~不管是Qt开发还是linux 嵌入式应用开发,一个人的核心竞争力还是不断思考,也就是不断琢磨。下面的程序...

Pou光明的博客 1265

【愚公系列】《AIGC辅助软件开发》041-如何使用 AI技术提升工作效率:AI辅助软件架构师实践

在数字化转型的浪潮中,软件架构师作为技术团队的核心,承载着系统设计与架构优化的重要责任。然而,随着项目复杂度的增加和技术环境的变化,架构师面临着前所未有的挑战。幸运的是,人工智能(AI)技术的迅猛发展为这一行业带来了新的机遇,帮助架构师提升工作效率、优化决策过程,并改善团队协作。本文将深入探讨AI如何辅助软件架构师的实际工作,具体分析AI在需求分析、架构设计、代码生成、测试和优化等环节的应用。

愚公智库 15万+

用电脑通过网口控制keysight示波器

Keysight HD304MSO示波器提供1GHz带宽、14位高精度ADC及10.1英寸触控屏,支持50μV低噪声信号捕获和1.3M波形/秒刷新率。配备4通道探头、逻辑分析仪接口及100Mpts存储深度,含故障诊断、FFT等高级功能。通过网线连接电脑安装TightVNC软件(示波器IP为169.254.163.24)可实现远程控制,相比U盘传输更高效。(149字)

johnboat的专栏 1136

QT tcp Socket 通信开发

折腾了很久TCP IP通信机制。 以前虽然看过bsd tcp/ip的so called 基础通信代码。什么bind, listen ,accept , receive, write, read,但是一直没真正理解。 这次由于公司需求,我狠狠地读了代码,并且搬出QT老本行,开始了QT For windows的编程。 这个大体构架是做一个聊天室软件。 每个client都可以给服

Keep moving…… 2554

8、内存交织技术详解

本文详细解析了内存交织技术的基本原理、工作机制及实现方式,探讨了其在提升内存访问速度和系统性能中的关键作用。文章还分析了内存交织的优缺点、实际应用场景以及与其他优化技术的结合应用,并提出了未来发展的可能方向,为理解与运用该技术提供了全面参考。

g9h0i1的博客 551

QT与Unity3D跨进程通信:基于TCP/IP与心跳机制的稳定实现方案

在跨平台应用开发中,进程间通信(IPC)是实现模块化与协同工作的关键技术。其核心原理在于通过操作系统提供的机制,在不同进程间安全、高效地交换数据。TCP/IP协议栈作为网络通信的基础,提供了可靠、有序的字节流传输能力,是实现跨进程、跨主机通信的通用方案。在工程实践中,基于TCP/IP的Socket通信能够有效解决传统IPC方式(如共享内存、管道)在跨平台兼容性、稳定性方面的不足,尤其适用于需要处理复杂业务逻辑与实时3D渲染的异构系统集成场景。通过设计自定义的应用层协议(如消息头+消息体结构)并嵌入心跳机制,

weixin_30781107的博客 414

uniapp(安卓 | 苹果) - 最新详细实现App打包发布教程,uni-app苹果IOS软件应用上架App Store软件商店,uni-app打包发布安卓Android软件到各大应用商店(详细教程

uni-app,安卓android,苹果ios,uniapp App软件,Uniapp上架发布应用,打包构建,apk、app软件,应用商店,应用市场,app store,uni-app安卓苹果app上架应用商店,app应用从创建到上架_uniapp打包app的流程和上架,uniapp打包上架ios Appstore 最全流程,苹果应用商店上架教程,uniapp生成的app怎么上架到iphone的app store,uni-app打包到上架Android , ios完整详细流程,审核一直不通过,软件商店审核失

✅ 精选推荐文章 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python GUI网络聊天室开发:从Socket到PyQt5实战

网络编程与GUI开发是Python全栈开发的两大核心技术。通过Socket模块实现TCP协议通信,结合多线程处理并发连接,可以构建稳定的客户端-服务器架构。PyQt5凭借其成熟的信号槽机制和丰富的UI组件,成为开发桌面GUI应用的理想选择。本文以网络聊天室项目为例,详细讲解如何使用Python标准库socket处理网络通信,配合PyQt5实现美观的聊天界面,涵盖TCP协议、JSON消息格式、多线程编程等关键技术点。这种技术组合特别适合需要实时交互的应用场景,如即时通讯、远程监控等系统开发。

weixin_34216196的博客 343

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Qt WebSocket实时通信实战:从原理到桌面客户端开发

在实时数据交互场景中,传统的HTTP轮询存在延迟高、服务器压力大的瓶颈。WebSocket协议通过一次握手建立全双工、持久化的TCP连接,实现了服务器主动推送和低开销通信,成为实时通信的核心技术。其技术价值在于显著降低延迟、减少冗余流量,并支持真正的双向数据流。在桌面客户端开发中,结合Qt框架强大的跨平台GUI能力和网络模块,可以高效构建稳定、响应迅速的实时应用。本文以实时日志监控为例,详细解析了WebSocket在Qt中的集成方案,涵盖了环境搭建、核心类封装、信号槽机制、JSON数据处理以及生产级优化策略

weixin_34221276的博客 472

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Qt WebSocket实战:从零构建实时聊天室,掌握网络编程核心技能

网络编程是C++客户端开发的核心技能之一,尤其在需要实时数据交互的场景中。传统的HTTP协议基于请求-响应模型,在服务器主动推送、高频双向通信等实时性要求高的场景下存在延迟高、开销大等局限。WebSocket协议通过在单个TCP连接上建立全双工通信通道,实现了低延迟、低开销的持久化双向通信,其技术价值在于显著提升了实时应用的性能和用户体验。在Qt开发中,QWebSocket类封装了该协议的核心功能,使得开发者能够高效构建股票行情、在线协作、游戏聊天、物联网控制等实时应用。本文聚焦Qt WebSocket实战

weixin_33898876的博客 413

Qt WebSocket客户端实战:从零构建实时通信模块

在C++跨平台开发中,网络通信是连接应用与服务的核心桥梁。传统的HTTP请求-响应模型难以满足实时、双向数据交换的需求,而WebSocket协议基于TCP连接,提供了全双工通信通道,有效解决了服务器主动推送和低延迟交互的技术痛点。其技术价值在于为桌面应用、嵌入式HMI及物联网终端提供了高效的实时数据链路。在Qt框架中,通过集成WebSocket模块,开发者可以构建稳定、可维护的客户端,处理网络事件循环、信号与槽的线程安全、连接状态管理及数据帧解析等工程细节。本文聚焦于**Qt网络编程**与**WebSock

weixin_33984032的博客 423

基于C++ Qt的WebSocket回显服务器:从零构建轻量级双向通信服务

WebSocket协议作为HTML5标准的一部分,实现了浏览器与服务器间的全双工通信,克服了HTTP协议单向通信的局限性。其工作原理是在TCP连接基础上,通过握手协议升级为持久连接,允许服务端主动推送数据。这一特性为实时应用提供了基础技术支持,在即时通讯、在线协作、实时数据监控等场景中具有重要价值。本文聚焦于使用C++ Qt框架快速实现一个轻量级WebSocket回显服务器,通过Qt WebSocket模块的集成与信号槽机制,完整演示了服务端的启动、连接管理和消息收发流程。该方案特别适合用于本地开发测试环境

weixin_30902251的博客 369
上一篇: Linux Socket 收发Json
下一篇: Linux C Socket Api详解
Pou光明
博客等级 码龄12年 3701粉丝 398原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值