You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

183 lines
5.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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
```
## 数据库
- 引擎SQLiteWAL 日志模式,支持并发读写)
- 外键约束已启用
- 用户密码使用 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
- 初始版本:注册登录、私聊、群聊、好友管理、历史记录、消息搜索