|
|
# SimpleChat
|
|
|
|
|
|
基于 Python + PyQt5 的局域网即时通信系统,支持私聊、群聊、好友管理和历史记录。
|
|
|
|
|
|
## 环境要求
|
|
|
|
|
|
- Python 3.8+
|
|
|
- PyQt5 >= 5.15.0
|
|
|
|
|
|
```bash
|
|
|
pip install PyQt5>=5.15.0
|
|
|
```
|
|
|
|
|
|
## 快速启动
|
|
|
|
|
|
### 方式一:直接运行(需 Python 环境)
|
|
|
|
|
|
**启动服务器**:
|
|
|
|
|
|
```bash
|
|
|
cd server
|
|
|
python main.py
|
|
|
# python main.py --host 0.0.0.0 --port 8888
|
|
|
```
|
|
|
|
|
|
**启动客户端**:
|
|
|
|
|
|
```bash
|
|
|
cd client
|
|
|
python main.py
|
|
|
```
|
|
|
|
|
|
### 方式二:打包运行(无需 Python 环境)
|
|
|
|
|
|
打包后的可执行文件位于 `dist/SimpleChat/`:
|
|
|
|
|
|
```
|
|
|
dist/SimpleChat/
|
|
|
├── SimpleChat-Server.exe # 服务器(8.5 MB)
|
|
|
├── SimpleChat-Client.exe # 客户端(37 MB,含 PyQt5)
|
|
|
├── 启动服务器.bat # 一键启动服务器
|
|
|
├── 使用说明.txt # 使用指南
|
|
|
├── database/ # 数据自动创建于此
|
|
|
├── avatars/
|
|
|
├── messages/
|
|
|
└── logs/
|
|
|
```
|
|
|
|
|
|
1. 双击 `启动服务器.bat` 或 `SimpleChat-Server.exe`
|
|
|
2. 双击 `SimpleChat-Client.exe`
|
|
|
|
|
|
自定义打包:
|
|
|
|
|
|
```bash
|
|
|
pip install pyinstaller
|
|
|
pyinstaller --onefile --console --name SimpleChat-Server server/main.py
|
|
|
pyinstaller --onefile --noconsole --name SimpleChat-Client --hidden-import PyQt5.sip client/main.py
|
|
|
```
|
|
|
|
|
|
## 默认账户
|
|
|
|
|
|
| 用户名 | 密码 | 昵称 |
|
|
|
|--------|--------|------------|
|
|
|
| admin | 123456 | 系统管理员 |
|
|
|
| user1 | 123456 | 用户一 |
|
|
|
| user2 | 123456 | 用户二 |
|
|
|
| user3 | 123456 | 用户三 |
|
|
|
|
|
|
## 功能
|
|
|
|
|
|
- 用户注册/登录
|
|
|
- 个人资料修改:用户名、昵称、密码(入口:主窗口右上角齿轮按钮)
|
|
|
- 私聊:实时消息 + 历史记录 + 消息搜索
|
|
|
- 群聊:创建/加入/退出群组、群内广播、邀请好友
|
|
|
- 好友管理:添加/删除好友、在线状态实时更新
|
|
|
- 会话列表:最近聊天、未读标记、消息预览
|
|
|
- 用户搜索与发现
|
|
|
- 表情选择器
|
|
|
- 通知浮层与任务栏闪烁提醒
|
|
|
- 心跳保活
|
|
|
- 多账号互踢
|
|
|
- 北京时间同步:所有消息时间戳统一使用 UTC+8
|
|
|
|
|
|
## 测试数据
|
|
|
|
|
|
首次启动服务器时自动填充测试数据,包括:
|
|
|
- 4 个用户之间的 14 条私聊对话
|
|
|
- "技术交流群"群组及 9 条群聊消息
|
|
|
- 5 组好友关系
|
|
|
|
|
|
## 界面设计
|
|
|
|
|
|
- 主色调:Indigo-Violet 紫蓝渐变(`#6366f1` → `#8b5cf6`)
|
|
|
- 侧边栏:深色渐变背景 + 半透明列表
|
|
|
- 聊天区:淡紫气泡(本人)/ 白色气泡(对方)
|
|
|
- 欢迎页:紫蓝粉三色渐变卡片
|
|
|
- 响应式布局:窗口大小自适应
|
|
|
|
|
|
## 项目结构
|
|
|
|
|
|
```
|
|
|
├── client/
|
|
|
│ ├── main.py # 客户端入口,ChatApplication 协调层
|
|
|
│ ├── client_core.py # TCP 通信核心
|
|
|
│ ├── config.py # 配置管理
|
|
|
│ ├── utils.py # 工具函数(校验、配置初始化)
|
|
|
│ └── ui/
|
|
|
│ ├── login_window.py # 登录窗口(响应式)
|
|
|
│ ├── register_window.py # 注册窗口(含实时校验)
|
|
|
│ ├── main_window.py # 主窗口(会话、好友、群组、发现)
|
|
|
│ ├── widgets.py # 共享组件(校验器、通知浮层、表情、设置)
|
|
|
│ ├── history_window.py # 聊天记录浏览器
|
|
|
│ ├── search_window.py # 消息搜索窗口
|
|
|
│ └── group_detail_window.py # 群组详情窗口
|
|
|
├── server/
|
|
|
│ ├── main.py # 服务器入口
|
|
|
│ ├── server_core.py # 服务器核心(多线程 TCP + 消息路由)
|
|
|
│ ├── database.py # SQLite 数据库操作(WAL 模式)
|
|
|
│ └── config.py # 服务器配置
|
|
|
├── database/
|
|
|
│ └── init_db.sql # 数据库初始化脚本
|
|
|
├── messages/ # 本地消息缓存目录
|
|
|
├── avatars/ # 头像文件目录
|
|
|
├── logs/ # 日志目录
|
|
|
└── requirements.txt
|
|
|
```
|
|
|
|
|
|
## 数据库
|
|
|
|
|
|
- 引擎:SQLite(WAL 日志模式,支持并发读写)
|
|
|
- 外键约束已启用
|
|
|
- 用户密码使用 MD5 哈希存储
|
|
|
- 所有时间戳统一使用北京时间(UTC+8)
|
|
|
- 首次启动自动创建 4 个测试用户并填充示例聊天记录
|
|
|
- 数据持久化:用户名、密码、昵称、好友关系、聊天记录、群组信息全部保存至 `database/chat.db`
|
|
|
|
|
|
### 数据表
|
|
|
|
|
|
| 表名 | 说明 |
|
|
|
|------|------|
|
|
|
| users | 用户表(含 updated_at 时间戳) |
|
|
|
| friendships | 好友关系表(双向存储) |
|
|
|
| messages | 消息表(私聊/群聊) |
|
|
|
| groups | 群组表 |
|
|
|
| group_members | 群组成员表 |
|
|
|
|
|
|
## 通信协议
|
|
|
|
|
|
消息格式:`[4字节大端长度][JSON数据]`
|
|
|
|
|
|
所有消息均为 JSON,通过 `type` 字段区分类型。主要类型:
|
|
|
|
|
|
| type | 说明 |
|
|
|
|-------------------|-------------|
|
|
|
| login/register | 登录/注册 |
|
|
|
| change_username | 修改用户名 |
|
|
|
| change_nickname | 修改昵称 |
|
|
|
| change_password | 修改密码 |
|
|
|
| chat/group_chat | 私聊/群聊消息 |
|
|
|
| get_users/friends | 获取用户/好友列表|
|
|
|
| create/join/leave_group | 群组操作 |
|
|
|
| get_history | 获取聊天记录 |
|
|
|
| search_messages | 搜索消息 |
|
|
|
| heartbeat | 心跳保活 |
|
|
|
|
|
|
## 更新日志
|
|
|
|
|
|
### v2.3
|
|
|
- 所有时间戳统一为北京时间(UTC+8),消除时区偏差
|
|
|
- 首次启动自动填充测试数据(好友、群组、聊天记录)
|
|
|
- 数据库 init_database 集成 seed 逻辑
|
|
|
|
|
|
### v2.2
|
|
|
- 新增用户名、昵称、密码修改功能
|
|
|
- 数据库启用 WAL 模式,性能提升
|
|
|
- 新增 updated_at 时间戳字段
|
|
|
- 全面升级 UI 配色(Indigo-Violet 主题)
|
|
|
- 默认内置 4 个测试用户
|
|
|
- SettingsDialog 重构,支持多类型资料修改
|
|
|
|
|
|
### v2.1
|
|
|
- 初始版本:注册登录、私聊、群聊、好友管理、历史记录、消息搜索
|