# QT多人聊天室 **Repository Path**: ljc2025/chatroom ## Basic Information - **Project Name**: QT多人聊天室 - **Description**: 这是一个基于Qt框架开发的聊天室项目,包含客户端和服务器端。客户端支持用户注册、登录、聊天和聊天记录查看等功能,界面美观易用。服务器端采用多线程处理并发连接,使用数据库sqlite存储用户信息和聊天记录。 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-02-26 - **Last Updated**: 2026-10-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: Qt ## README # ChatRoom - Qt聊天室项目 ## 项目简介 这是一个基于Qt框架开发的聊天室应用程序,包含客户端和服务器端两部分。客户端提供用户注册、登录、即时聊天和聊天记录查看等功能,界面美观易用。服务器端采用多线程处理并发连接,使用数据库存储用户信息和聊天记录。 ## 功能特点 ### 客户端功能 - 用户注册与登录 - 实时聊天功能 - 聊天记录查看 - 美观的图形用户界面 - 支持多用户在线 ### 服务器端功能 - 多线程并发处理 - 数据库存储用户信息 - 聊天记录持久化 - 在线用户管理 ## 项目结构 ``` chatroom/ ├── client/ # 客户端代码 │ ├── chat.cpp/h # 聊天窗口实现 │ ├── chatHistory.cpp/h # 聊天记录窗口 │ ├── dialog.cpp/h # 主对话框 │ ├── useRegister.cpp/h # 用户注册窗口 │ └── main.cpp # 客户端入口 └── server/ # 服务器端代码 ├── database_handler.cpp/h # 数据库处理 ├── dialog.cpp/h # 服务器主窗口 ├── workerthread.cpp/h # 工作线程 └── main.cpp # 服务器入口 ``` ## 项目架构说明 ### 整体架构 本项目采用经典的客户端-服务器(C/S)架构,通过网络通信实现即时聊天功能。 ``` 客户端 (Client) 服务器 (Server) | | |-- 注册/登录请求 ----------> | | |-- 验证用户信息 | |-- 访问数据库 |<-- 返回结果 ---------------- | | | |-- 聊天消息 ---------------> | | |-- 转发消息 |<-- 接收其他用户消息 -------- | | | |-- 聊天记录请求 -----------> | | |-- 查询数据库 |<-- 返回历史记录 ------------ | ``` ### 客户端架构 - **主界面层**:负责用户交互和界面展示 - 登录界面 (dialog) - 注册界面 (useRegister) - 聊天界面 (chat) - 聊天记录界面 (chatHistory) - **通信层**:负责与服务器进行网络通信 - 使用Qt网络模块实现TCP通信 - 处理消息的发送和接收 ### 服务器端架构 - **主服务器** (dialog) - 监听客户端连接 - 管理在线用户列表 - 分配工作线程处理客户端请求 - **工作线程** (workerthread) - 处理单个客户端的请求 - 实现消息转发 - 维护客户端连接状态 - **数据库处理** (database_handler) - 用户信息管理 - 聊天记录存储 - 数据库连接管理 ### 数据流向 1. **用户注册流程** - 客户端发送注册信息 → 服务器验证 → 写入数据库 → 返回结果 2. **用户登录流程** - 客户端发送登录信息 → 服务器查询数据库 → 验证通过 → 添加到在线列表 3. **消息发送流程** - 客户端发送消息 → 服务器接收 → 转发给目标用户 → 存入数据库 4. **聊天记录查询流程** - 客户端请求记录 → 服务器查询数据库 → 返回历史记录 ## 消息协议格式 ### 通信基础 - **传输协议**:TCP - **数据编码**:UTF-8 - **消息分隔**:使用换行符 `\n` 作为消息结束符 - **消息格式**:基于文本的协议,使用特定标签标识消息类型 ### 客户端 → 服务器消息格式 #### 1. 用户登录 ``` [登录]用户名:密码 ``` #### 2. 用户注册 ``` [注册]用户名:密码 ``` #### 3. 用户名注册(登录后) ``` [用户名]用户名 ``` #### 4. 公共聊天消息 ``` 用户名:消息内容 ``` #### 5. 私聊消息 ``` [私聊][接收者用户名]消息内容 ``` #### 6. 请求聊天记录 ``` [请求聊天记录]关键词 ``` #### 7. 断开连接 ``` [连接断开] ``` ### 服务器 → 客户端消息格式 #### 1. 系统通知 ``` [系统通知]通知内容 ``` #### 2. 公共聊天消息 ``` 用户名:消息内容 ``` #### 3. 私聊消息 ``` [私聊来自]发送者用户名:消息内容 ``` #### 4. 在线列表更新 ``` [在线列表]用户1,用户2,用户3,... ``` #### 5. 聊天记录 ``` [聊天记录]时间|发送者|消息内容 [聊天记录]时间|发送者|消息内容 ... ``` #### 6. 认证响应 ``` [登录]成功 [登录]失败:原因 [注册]成功 [注册]失败:原因 ``` ### 消息处理流程 1. **客户端发送消息** - 构造符合协议格式的消息字符串 - 转换为UTF-8编码 - 添加换行符 `\n` - 通过TCP发送 2. **服务器接收消息** - 读取TCP数据流 - 按换行符分割消息 - 根据消息标签识别消息类型 - 分发到相应的处理函数 3. **服务器发送响应** - 构造响应消息 - 添加换行符 `\n` - 发送给目标客户端或广播 4. **客户端接收响应** - 读取TCP数据流 - 按换行符分割消息 - 根据消息标签识别消息类型 - 更新UI显示 ### 特殊说明 - 所有消息必须以换行符 `\n` 结尾 - 消息内容不支持换行 - 用户名和密码不能包含冒号 `:` - 消息标签使用中文字符,需要确保UTF-8编码正确 ## 环境要求 - Qt 5.x 或更高版本 - C++11 或更高版本 - 数据库支持(如SQLite、MySQL等) ## 许可证 本项目采用开源许可证,详见 [LICENSE](LICENSE) 文件。 ## 贡献 欢迎提交问题和拉取请求! ## 联系方式 如有问题或建议,欢迎通过Issue反馈。