# Uchat——基于python的安全即时通讯系统
## tips
请不要在同一目录下运行服务端与客户端,否则会因为密钥冲突产生类型错误。即请分别运行服务端与客户端。
## 目的
设计完成简易的安全即时通讯系统,实现类似于QQ的聊天软件;
## 需求分析
### 功能需求
1. 聊天客户端
1. 注册:用户与集中服务器通信完成注册,包括用户名、密码、邮箱、性别、年龄、数字证书等信息传输,其中数字证书包含公钥、用户名、邮箱等信息。私钥单独保存在客户端一个文件夹下不进行传输;能显示用户名、邮箱不符合格式规范或者重复,空输入等错误信息。
2. 认证登录:客户端与集中服务器通信完成用户名、口令认证登录;能显示用户名、密码错误导致的登录错误信息。还有已登录账号再次登录时的多重登录检验,并将之前登陆的账号顶下去。
3. 好友管理:用户可通过服务器进行搜索、添加、删除好友。
4. 即时通信:用户通过客户端实现与好友的聊天,包括文字、图片传输。文字可实现字体颜色和大小的改变。
5. 聊天记录:客户端能够保存聊天记录并且可以查看聊天记录。
6. 消息加解密:采用D-H体制协商加密秘钥,用对称密码AES算法进行加解密。
7. 消息摘要:使用MD5算法实现消息摘要认证功能,确保发送消息的完整性。
8. 用户未读消息提醒:红点标注未读消息数目,并按最后发送消息时间排列好友列表。
9. 用户离线后消息处理:用户上线后及时接收到离线时好友发送的消息。
功能结构图
![](https://leeyuxun-1258157351.cos.ap-beijing.myqcloud.com/img/20200714124535.png)
2. 集中服务器
1. 用户注册:与用户通信完成注册,对用户名和邮箱格式、是否重复,输入不规范等做必要的检验,接收客户端的数字证书,发送服务端数字证书。
2. 登录验证:用户登录时,验证用户名和密码是否正确,并向客户端返回登录结果。如信息正确,就将在线好友用户发给该用户,将该用户的状态发给各在线好友用户,同时在服务器端显示出来。
3. 用户公钥,证书提供:用户向好友发送消息时,与服务器建立安全连接获取好友的证书信息,服务器控制client.socket像好友用户发送信息,实现用户之间的通信。
4. 用户在线状态维护:当用户在线时,记录保存用户的在线状态、IP地址、端口号。
5. 用户消息列表实时发放:由监听函数将操作实时加入到执行函数列表中递归执行。向用户发送其好友列表的在线离线情况,包括好友用户名、IP地址、端口号。并按照最后发消息的时间对好友消息列表进行排序。
功能结构图
![](https://leeyuxun-1258157351.cos.ap-beijing.myqcloud.com/img/20200714124653.png)
3. 高级功能
1. 离线用户消息通知:暂时存储离线用户的消息,用户上线后,显示未读的消息并用红点标注;
2. 好友在线离线功能实时更新;
3. 限制账号只能一处登录:一个账号只能在一处登录,在别处登录时会把原先的登录踢下线;
4. 支持群聊功能:可以创建群聊,并根据群号加入群聊;
5. 聊天时字体大小颜色可更改;
6. 支持聊天各类图像文件的缓存。
### 数据需求
1. 客户端
客户端登录后加过的好友和加入的群聊需要从数据库中调出信息并在前端反馈呈现出来。客户端的聊天记录可以存储在数据库中,用到时直接读取返回消息历史。
2. 集中服务器
1. users表:用户信息表,存储用户基本信息,包括用户ID(id)、用户名(username)、密码(password)、电子邮箱(email)、用户登录IP地址(ip)、用户登录端口(port)、性别(sex)、年龄(age)、公钥(pk)。
| 名称 | 数据类型 | 主键 | 是否唯一 | 是否为空 | 备注 |
| -------- | -------- | ---- | -------- | -------- | -------- |
| id | INTEGER | Y | Y | N | 用户id |
| username | TEXT | N | Y | N | 用户名 |
| password | TEXT | N | Y | N | 密码 |
| email | TEXT | N | Y | N | 邮箱 |
| ip | TEXT | N | Y | N | 登录IP |
| port | TEXT | N | Y | N | 登录端口 |
| sex | TEXT | N | Y | N | 性别 |
| age | TEXT | N | Y | N | 姓名 |
| pk | TEXT | N | Y | N | 公钥 |
2. friends表:存储用户的好友信息,包括用户id(from_user_id)、好友id(to_user_id)、加好友请求是否接受(accepted)。
| 名称 | 数据类型 | 主键 | 是否唯一 | 是否为空 | 备注 |
| ------------ | -------- | ---- | -------- | -------- | -------- |
| from_user_id | INTEGER | Y | Y | N | 本人ID |
| to_user_id | INTEGER | Y | Y | N | 好友ID |
| accept | BOOLEAN | N | N | N | 接受状态 |
3. chat_history表:存储好友的聊天记录,包括发送方ID(user_id)、接收方(target_id)ID(target_type)、聊天数据(data)(BLOB类型存储二进制大对象,可以实现文件数据的直接存储),sent(用于标识消息是否已发送,若未发送,先存储这个操作,在某一次事件再次触发时检查标志位,操作服务端再次控制client.socket发送消息)。
| 名称 | 数据类型 | 主键 | 是否唯一 | 是否为空 | 备注 |
| ----------- | -------- | ---- | -------- | -------- | ----------------- |
| id | INTEGER | Y | Y | N | 消息ID |
| user_id | INTEGER | N | N | N | 用户ID |
| target_id | INTEGER | N | N | N | 消息目标ID |
| target_type | TEXT | N | N | N | 目标类型:群/用户 |
| data | BLOB | N | N | N | 消息体 |
| sent | BOOLEAN | N | N | N | 发送是否成功 |
4. rooms表:群组表,包括该群组的主键ID(id)、群组的名称(room_name)。
| 名称 | 数据类型 | 主键 | 是否唯一 | 是否为空 | 备注 |
| --------- | -------- | ---- | -------- | -------- | ------ |
| id | INTEGER | Y | Y | N | 群聊ID |
| room_name | TEXT | N | Y | N | 群聊名 |
5. room_user表:群组用户表,包括群组的ID,群聊房间号(room_id)、加入该群组的用户(user_id)。
| 名称 | 数据类型 | 主键 | 是否唯一 | 是否为空 | 备注 |
| ------- | -------- | ---- | -------- | -------- | ------ |
| id | INTEGER | Y | Y | N | ID |
| room_id | INTEGER | N | N | N | 群聊ID |
| user_id | INTEGER | N | N | N | 用户ID |
### 性能需求
1. 可靠性需求
保证一个用户只能同时使用一个IP地址登录,客户端不会出现闪退、加密无效的情况。
2. 安全性需求
客户端做好完整的封装;传输信息采用经过公钥加密机制协商的AES对称加密秘钥;服务器及时更新客户端IP地址等信息。
3. 可维护性与可扩展性需求
对于软件功能方面,采用高内聚低耦合的模块化设计,包括登录模块、注册模块、好友列表模块、聊天模块等,确保每个模块的具有较高的独立性,使软件源码便于维护,同时便
程序员张小妍
- 粉丝: 1w+
- 资源: 3474
最新资源
- 基于智慧云校园管理系统全部资料+高分项目+详细文档.zip
- 基于智慧自助餐饮系统-图像识别全部资料+高分项目+详细文档.zip
- 彩虹-DNS管理系统源码V2.0.1,SSL证书自动申请与部署.zip
- 7寸液晶屏覆膜机(含工程图bom单)sw16全套技术开发资料100%好用.zip
- AI程序源码最新,支持多个国家语言.zip
- 0.64四方针插针打弯机(sw12可编辑+cad)全套技术开发资料100%好用.zip
- 600离心清洗机sw13可编辑全套技术开发资料100%好用.zip
- 基于 Linux 的智能家居系统全部资料+详细文档+优秀项目.zip
- 基于 Yunzai 的小米智能家居控制插件全部资料+详细文档+优秀项目.zip
- 基于android的智能语音家居控制系统 安卓端1.0全部资料+详细文档+优秀项目.zip
- 基于C#的智能家居控制系统通信协议的实现全部资料+详细文档+优秀项目.zip
- 基于LLM Agent的全能管家,通过语音或文字交互,调用工具控制智能家居(HA米家)和电脑。超高拓展性,无限可能。全部资料+详细文档+优秀项目.zip
- 基于ESP32-S3的小键盘,具有时间显示、实时天气、天气预报、实时股票、快捷键、蓝牙键盘、倒计时、快捷访问网站、米家智能家居控制等功能。全部资料+详细文档+优秀项目.zip
- 基于QML智能家居UI全部资料+详细文档+优秀项目.zip
- 基于python实现智能家居物联网服务平台全部资料+详细文档+优秀项目.zip
- 基于STC89C52的智能家居系统全部资料+详细文档+优秀项目.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
前往页