C++ 仿 QQ 聊天室项目实战:Qt 客户端 + epoll 服务端 + Reactor 架构 (含源码)
GitHub 地址:https://github.com/jingxincurry/IM_Chat.git
一、项目效果
该项目实现了一个完整的仿 QQ 局域网聊天室:
- 图形化 Qt 客户端
- Linux epoll 服务端
- Reactor 架构版本服务端
- 文件上传与下载
- 在线用户列表同步
- 系统消息广播
客户端界面功能
- 输入服务器 IP 和端口
- 用户名登录
- 群聊消息发送
- 在线用户显示
- 文件列表显示
- 上传/下载文件

二、项目结构
jsx
IM_Chat/
├── Client/ # Qt 客户端
├── Server/ # epoll 服务端
├── Server_Reactor/ # Reactor 服务端(二选一用于学习)
├── CMakeLists.txt
└── README.md
三、核心功能
1. 用户登录
jsx
CmdLogin
客户端输入用户名后发送:
服务器处理后:
- 保存用户名
- 广播系统消息
- 更新在线用户列表
2. 群聊
客户端发送:
CmdChatMessage
服务器广播给所有在线用户。

3. 在线用户列表
服务器维护:
std::map<int,ClientSession>m_clients;
每次登录或断开后广播:
CmdUserList

4. 文件上传
上传流程:
jsx
UploadBegin
UploadChunk
UploadEnd
5. 文件下载
下载流程:
DownloadRequest
DownloadBegin
DownloadChunk
DownloadEnd

6、自定义协议设计
为了解决 TCP 粘包问题,设计了固定包头协议。

7、编译方式
服务端(2个版本均可)
cmake -S . -B build -DBUILD_CLIENT=OFF -DBUILD_SERVER=ON
cmake --build build
客户端
直接用 Qt Creator 打开根目录 CMakeLists.txt。
8、运行步骤
- 启动服务端
- 启动客户端
- 输入 IP 和端口(默认 8888)
- 登录
- 聊天
- 上传/下载文件
四、项目亮点
- 完整 IM 系统
- Qt 图形界面
- epoll 高并发
- Reactor 模式
- 自定义协议
- 文件传输
- 粘包处理
五、总结
这个项目完整实现了一个仿 QQ 聊天室系统,涵盖了:
C++ 网络编程、Qt GUI 开发、epoll、Reactor、自定义协议、文件传输、粘包处理、CS网络架构等内容。