qt中socket通信流程图_基于Qt的局域网通信设计说明书.doc

文档控制记录

序号版本日期修改内容修改人审批人1V1.02017-04-24创建2

目录目录4 辅助功能设计14

1目的

本文主要介绍利用Qt实现局域网通信的主要实现流程和一些技术知识点的设计说明。

2总体设计

2.1 功能特点

这款局域网通信软件是基于Qt的实现的C/S架构通信,通信功能全部采用QTcpSocket完成的。该软件分为2部分,一部分是服务端,一部分是客户端。

消息通信采用QJsonValue的格式进行封装,方便封装和解析。

2.2 模块结构

整个设计可以大致分为服务端、客户端,服务端功能相对比较单一,仅仅做了客户端的消息管理和转发等。数据库读写等。客户端相对较为丰富。包括好友管理、群组管理、tcp消息管理,数据库管理,

整个项目设计的功能的设计流程图大致如下所示:

图2-1

2.3 开发环境

本项目的采用Qt进行设计开发,Qt版本为5.7.0,在后续代码维护和修改的时候建议使用该版本或更高的版本。

3模块说明

本设计中主要使用4个大类,一个QTcpServer,另外一个是QTcpSocket,主要是用于通信的,但是他们通信的时候采用了QJsonValue的数据格式进行交互,下面针对这个几个主要的模块进行简单介绍下。最后就是数据库QDataBase

3.1 QTcpServer类

本设计中服务器使用的就是QTcpServer,我们在使用他的时候只需要知道的一个信号就行了,就是有新的tcp链接上来的额时候,可以及时通知我,然后我这边进行客户端的链接处理。如下:

m_tcpServer = new QTcpServer(this);

connect(m_tcpServer, SIGNAL(newConnection()), this, SLOT(SltNewConnection()));

当有新的客户端链接上来,我们只需要在这个槽函数中进行处理就行了。

3.2 QTcpSocket类

该类为TCP的通信类,主要是链接服务器与客户端的。当连接或者断开开都可以获取该消息通知。并做出相应的处理。

connect(m_tcpSocket, SIGNAL(readyRead()), this, SLOT(SltReadyRead()));

connect(m_tcpSocket, SIGNAL(connected()), this, SLOT(SltConnected()));

connect(m_tcpSocket, SIGNAL(disconnected()), this, SLOT(SltDisconnected()));

3.3 QJsonValue类

该类为TCP通信的参数传递类,用于封装传递消息的。其格式如下:

图3-2-1 JSON数据封装

然后数据输出为:

{"data":{"name":"xiaoni","passwd":"123456"},"from":1,"type":2}

分别表示为:

Type: 消息传输类型(比如登陆、注册、消息发送、文件发送等)

From: 表示发送者的id。

Data:传输数据的封装对象,里面可能是json数组或则直接就是对象

// 对于这个json格式的解析如下:(其他格式均是如此)

// data 的 value 是对象

if (dataVal.isObject()) {

QJsonObject dataObj = dataVal.toObject();

QString strName = dataObj.value("name").toString();

QString strPwd = dataObj.value("passwd").toString();

m_nId = DataBaseMagr::Instance()->CheckUserLogin(strName, strPwd);

qDebug() << "Login" << strName << strPwd << m_nId;

// 返回客户端

QJsonObject json;

json.insert("id", m_nId);

json.insert("code", -1 == m_nId ? m_nId : 0);

json.insert("msg", -1 == m_nId ? "error" : "ok");

if (

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值