文档控制记录

序号版本日期修改内容修改人审批人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 (

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

  1. stc89c51单片机音乐盒系统设计_基于51单片机音乐盒课程设计1.doc

    基于51单片机音乐盒课程设计1 课程名称: 微机原理课程设计 题 目: 基于单片机的音乐盒设计 摘要 随着人类社会的发展,人们对视觉.听觉方面的享受提出了越来越高的要求.小小的音乐盒可以给人们带来美好 ...

  2. qt中socket通信流程图_使用QT实现简单的tcp/ip通信

    使用QT实现tcp/ip的通信非常的简单,下面我将直接贴出代码: 一.服务器端 1.头文件#ifndef SERVERWIDGET_H #define SERVERWIDGET_H #include ...

  3. 彩灯控制器课程设计vhdl_(EDA)基于VHDL八路彩灯控制器设计说明书.doc

    目录 1.任务需求2 2. 总体设计2 2.1 各个花样的状态图2 2.2总体框图4 3. 模块设计4 3.1分频器模块4 3.2花样一模块5 3.3花样二模块6 3.4花样三模块8 3.5顶层设计1 ...

  4. qt web混合编程_基于Qt与MATLAB的混合编程技术

    摘要:在Qt雷达仿真系统中,数据处理及图形显示尤为重要.本文为此提出了一种Qt与MATLAB混合编程的方法.通过VC++和MATLAB混合编程技术,将MATLAB函数封装成动态链接库,Qt调用这个动态 ...

  5. qt中socket编程

    1 文章概括 在qt中借助designer设计通信界面,然后使用QTcpServer,QTcpSocket编写服务器和客户端的程序. 首先建立两个工程,一个是客户端client,另一个是服务器端ser ...

  6. qt制作一个画板_基于Qt的画图板的设计与实现(含录像)

    基于Qt的画图板的设计与实现(含录像)(任务书,开题报告,外文翻译,毕业论文20000字,程序代码,答辩PPT,答辩视频录像) 摘要 本文的主要内容是记述画图板的设计与实现课程设计中的一些关键技术和辅 ...

  7. ubuntu下qt模拟键盘按键按下_基于QT的跨平台虚拟键盘设计与实现

    摘  要: 针对QT在Windows.Linux.以及嵌入式Linux-arm等不同平台下没有开源.高效的虚拟键盘(包含中文输入法),以及QT版本升级造成代码不兼容等问题,设计并实现了一个跨平台的虚拟 ...

  8. qt 历史记录控件_基于Qt图形界面软件的操作日志记录方法及系统_2015106293015_说明书_专利查询_专利网_钻瓜专利网...

    技术领域 本发明涉及一种软件系统的日志记录技术,特别涉及一种基于Qt图形界面软件的操作日志记录方法及系统. 背景技术 软件操作日志是记录用户在使用软件的过程中,通过鼠标和键盘在操作界面上执行的点击和输 ...

  9. qt中实现左右分割线_一种快速刷新richedit中内嵌动画的方法的实现

    在IM中使用动画表情是一种非常有趣的方式,然而选择一种合适的方式来实现却并不容易. 一般来说,除了自己去实现一个富文本控件,目前主要的解决方案有3种: 1.使用浏览器做容器. 2.使用QT提供的Ric ...

最新文章

  1. python模拟键盘输入字符_Python | 根据关键字符串遍历窗口 模拟键盘输入操作
  2. 计算机组成原理——程序查询方式、程序中断方式
  3. linux mysql5.6编译_Linux 环境下编译安装MySQL5.6的笔记记录
  4. 十九、深入Python匿名函数
  5. bootstrap+fileinput插件实现可预览上传照片功能
  6. Eclipse里调试时遇到Source not found应该怎么办
  7. springboot启动时报错:Failed to load property source from location 'classpath:/application.yml'
  8. 如何成为一名更出色的开发者?
  9. 北京地铁规划大全(图),买房子可以参考一下
  10. Effective Use of Word Order for Text Categorization with Convolutional Neural Networks
  11. 基于pyqt5的Demo软件开发
  12. 舞台音效控制软件_QLab Pro 4.3.2 优秀的舞台音乐控制软件
  13. Android APP推广流程
  14. 复制出来的虚拟机加入域提示试图加入域的SID与本计算机的SID相同解决方法
  15. Linux shell爬虫实现树洞网鼓励师(自动回复Robot)
  16. 浙江大学 工程伦理 第十二单元测试答案
  17. mysql 创建 unique key_MySQL-创建表时一起使用时,“ PRIMARY KEY”,“ UNIQUE KEY”和“ KEY”的含义...
  18. Bilibili批量取消关注
  19. python 多线程实现多任务,多进程实行多任务
  20. 深入浅出Java线程池:理论篇

热门文章

  1. React Native 入门实战视频教程(4 个视频)
  2. SMIC工艺库的命名规则
  3. eNSP VLAN配置
  4. 山西电力市场日前价格预测【2023-06-19】
  5. 国产分布式数据库StarDB核心技术 一:内核分解之数据分片
  6. Arduino驱动HC-05蓝牙模块
  7. BIGEMAP如何直接打开AutoCAD格式的DXF文件
  8. linux如何运行rpm包,如何制作RPM包
  9. 免费的Logo生成!
  10. python+opencv安装方法,以及关键问题解决【win,linux,mac】