基于Qt实现的局域网聊天系统

Carewho

发布日期: 2021-02-21 09:19:55 浏览量: 110
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、环境

1.1 开发平台

  • 硬件配置
    • CPU:Intel(R) Core(TM) i5-5200U,主频2.2GHz
    • 内存:8.0GB DDR3,1600MHz
    • 硬盘:500GB 机械硬盘

1.2 系统软件组件

  • 操作系统:Windows 10 Pro Insider Preview

  • 版本:17109

  • OS内部版本:16299.125

1.3 开发平台

  • Qt版本信息

    • Qt Creator 4.5.0(Community)
    • Qt 5.10.0 for Desktop(MinGW 5.3.0 32 bit)
  • MySql数据库

    • MySql Server
    • Version 5.7.20
  • 数据库可视化界面操作软件

    • Navicat For MySql
    • Version 10.1.7-enterprise

1.4 使用的第三方组件

  • mysql-connector-c-6.1.11-win32.msi

二、系统功能需求

基于TCP和UDP协议实现一个即时通讯工具,具体功能要求包括:

  • 工具包括服务器端和客户端

  • 具备用户注册、登录、找回密码功能(基于TCP协议)

  • 两个用户如果同时在线,采用点到点通信方式进行聊天,信息不需要通过服务器中转,服务器也不保存(基于TCP协议)

  • 支持离线消息(基于TCP协议)

  • 支持点到点可靠文件传输(基于UDP协议)

  • 存储在服务器端的数据需要进行强加密

  • 支持不少于两组用户同时在线交流和传输文件

  • 文件传输具有良好的性能,能够充分利用网路带宽

  • 人机交互友好,软件易用性强

三、系统设计

3.1 系统架构

系统总架构图

3.2 功能模块划分

  • 数据库模块:数据库中包含两个数据表

    • 数据表一保存用户的登录名、密码、手机号、客户登录后的IP地址和端口号以及用户在线状态等信息,并对密码进行加密
    • 数据表二用于保存离线消息;数据库只和服务器连接,通过服务器将用户的登陆结果、找回密码、离线消息发给客户端,通过服务器获取用户的IP地址和端口号以及用户在线状态。
  • 服务器模块

    • 连接数据库和客户端,返回客户端的注册、登录、找回密码的结果
    • 中转客户端群聊消息
    • 获取用户离线消息并写入数据库
    • 获取用户IP地址和端口号
  • 客户端模块

    • 实现用户注册、登录、找回密码
    • 实现基于TCP的实时群聊消息、点对点私聊消息,找回密码,发送离线消息
    • 基于UDP的点对点文件传输

3.3 应用层协议设计

由于系统要求基于UDP实现可靠数据传输功能,而UDP本身是一个不可靠的协议,对于丢包它无任何操作,数据丢了也不会进行任何处理,因此需要设计一个协议,通过UDP来完成可靠数据传输。

主要思想为停等协议,利用超时重传机制。当发送者(称为A)给接受者(称为B)发送报文时,在运输层分段并加上运输层首部,B每收到A的一条报文,则发送一个ACK给A,A收到B的ACK之后再接着发送下一个报文段,最终将所有报文依次发送给B。其中A在1秒内未收到B的ACK时(包括B未收到A的报文段、B收到A的报文段但A未收到B的ACK或网络拥塞导致报文段未能在1s内到达A),将它上次发送的报文段再次发送给B,这样就可解决上述三种问题,确保数据成功到达B之后再接着发送下一个报文段,这样便可完成简单的可靠数据传输。

四、系统实现

4.1 用户注册功能

客户端将注册的信息(账户名、密码、手机号、密保问题、密保答案)发送给服务器,服务器返回注册结果,若注册成功则将信息写入数据库。

注册流程图

4.2 用户登录功能

客户端将用户的账户名和密码发给服务器,服务器将用户名和密码与数据库中保存的用户名和密码进行比对并返回登录结果,若登录成功客户端显示登录后界面。

登录流程图

4.3 用户找回密码功能

客户端将用户的帐户名、手机号、密保问题、密保答案发给服务器,服务器将信息和数据库中保存的信息进行对比并返回结果,若用户名、手机号、密保问题、密保答案都正确则将密码发送回客户端。

找回密码流程图

4.4 点对点聊天功能

用户A在客户端双击要私聊的对象用户B(B此时在线),并将此B的用户名发给服务器,服务器判断B在线,则返回B的IP地址和端口号并发送给A,A再与B建立连接实现点对点聊天。

点对点聊天流程图

4.5 实时群聊功能

用户A点击“发送”按钮后先将消息框中的内容发给服务器,服务器接收后首先从数据库的status判断有哪些用户在线,再依次和这些用户建立连接并将收到的群聊消息发给这些在线用户,用户收到后在自己的消息框显示。

群聊流程图

4.6 离线消息功能

  • 发送离线消息:用户A在客户端双击要私聊的对象用户B(B此时不在线),服务器判断B不在线,则将A发的消息写入数据库

  • 接受离线消息:用户B登录后首先服务器判断数据库表中是否有该B的离线消息,若有则将此离线消息发送给B并在B的消息框中显示

4.7 数据加密功能

注册的时候将密码通过MySQL自带的加密函数AES_ENCRYPT()进行加密。

4.8 点对点可靠文件传输功能

用户A获取用户B的文件。

发送文件流程图

五、系统测试及结果说明

5.1 测试硬件环境

  • 机器配置

    • CPU:Intel(R) Core(TM) i5-5200U,主频2.2GHz
    • 内存:8.0GB DDR3,1600MHz
    • 硬盘:500GB 机械硬盘
  • 网络配置

    • 网卡:Intel(R) Dual Band Wireless-AC 3160
    • 测试网络:HUST_WIRELESS_AUTO
    • 速度:72.2Mbps

5.2 系统测试结果

注册

数据库信息

登录

登录成功显示聊天界面

密保答案错误

找回密码成功

群聊

点对点私聊

发送离线消息

离线消息写入数据库

数据库密码加密

发送文件

六、其它需要说明的问题

  • 本系统可禁止重复登录

  • 本系统可实现群聊功能

  • 登陆界面中的背景图片为绝对路径:E:/,背景图已加在文件中

  • 本系统文件传输部分不够完善,若要在两台电脑之间传输文件,需要在源码的TClient工程中的sendfile.h头文件中将YIP改为发送方(接收方)的IP地址。还需要在tclient.cpp在IP=””,中输入服务器IP地址

  • 找回密码时需要输入手机号、密保问题、密保答案,若错误,用户可明确知道是哪一项错误

上传的附件 cloud_download 基于Qt实现的局域网聊天系统.7z ( 17.27mb, 1次下载 )
error_outline 下载需要9点积分

发送私信

人生没有彩排,每天都是现场直播

10
文章数
21
评论数
最近文章
eject