# 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 - 初始版本:注册登录、私聊、群聊、好友管理、历史记录、消息搜索