Carewho
操作系统:Windows 10 Pro Insider Preview
版本:17109
OS内部版本:16299.125
Qt版本信息:
MySql数据库:
数据库可视化界面操作软件:
基于TCP和UDP协议实现一个即时通讯工具,具体功能要求包括:
工具包括服务器端和客户端
具备用户注册、登录、找回密码功能(基于TCP协议)
两个用户如果同时在线,采用点到点通信方式进行聊天,信息不需要通过服务器中转,服务器也不保存(基于TCP协议)
支持离线消息(基于TCP协议)
支持点到点可靠文件传输(基于UDP协议)
存储在服务器端的数据需要进行强加密
支持不少于两组用户同时在线交流和传输文件
文件传输具有良好的性能,能够充分利用网路带宽
人机交互友好,软件易用性强
系统总架构图
数据库模块:数据库中包含两个数据表
服务器模块:
客户端模块:
由于系统要求基于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之后再接着发送下一个报文段,这样便可完成简单的可靠数据传输。
客户端将注册的信息(账户名、密码、手机号、密保问题、密保答案)发送给服务器,服务器返回注册结果,若注册成功则将信息写入数据库。
注册流程图
客户端将用户的账户名和密码发给服务器,服务器将用户名和密码与数据库中保存的用户名和密码进行比对并返回登录结果,若登录成功客户端显示登录后界面。
登录流程图
客户端将用户的帐户名、手机号、密保问题、密保答案发给服务器,服务器将信息和数据库中保存的信息进行对比并返回结果,若用户名、手机号、密保问题、密保答案都正确则将密码发送回客户端。
找回密码流程图
用户A在客户端双击要私聊的对象用户B(B此时在线),并将此B的用户名发给服务器,服务器判断B在线,则返回B的IP地址和端口号并发送给A,A再与B建立连接实现点对点聊天。
点对点聊天流程图
用户A点击“发送”按钮后先将消息框中的内容发给服务器,服务器接收后首先从数据库的status判断有哪些用户在线,再依次和这些用户建立连接并将收到的群聊消息发给这些在线用户,用户收到后在自己的消息框显示。
群聊流程图
发送离线消息:用户A在客户端双击要私聊的对象用户B(B此时不在线),服务器判断B不在线,则将A发的消息写入数据库
接受离线消息:用户B登录后首先服务器判断数据库表中是否有该B的离线消息,若有则将此离线消息发送给B并在B的消息框中显示
注册的时候将密码通过MySQL自带的加密函数AES_ENCRYPT()进行加密。
用户A获取用户B的文件。
发送文件流程图
机器配置
网络配置
注册
数据库信息
登录
登录成功显示聊天界面
密保答案错误
找回密码成功
群聊
点对点私聊
发送离线消息
离线消息写入数据库
数据库密码加密
发送文件
本系统可禁止重复登录
本系统可实现群聊功能
登陆界面中的背景图片为绝对路径:E:/,背景图已加在文件中
本系统文件传输部分不够完善,若要在两台电脑之间传输文件,需要在源码的TClient工程中的sendfile.h头文件中将YIP改为发送方(接收方)的IP地址。还需要在tclient.cpp在IP=””,中输入服务器IP地址
找回密码时需要输入手机号、密保问题、密保答案,若错误,用户可明确知道是哪一项错误