C++ 仿 QQ 聊天室项目:Qt 客户端 + epoll 服务端 + Reactor 架构(含源码)

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、运行步骤

  1. 启动服务端
  2. 启动客户端
  3. 输入 IP 和端口(默认 8888)
  4. 登录
  5. 聊天
  6. 上传/下载文件

四、项目亮点

  • 完整 IM 系统
  • Qt 图形界面
  • epoll 高并发
  • Reactor 模式
  • 自定义协议
  • 文件传输
  • 粘包处理

五、总结

这个项目完整实现了一个仿 QQ 聊天室系统,涵盖了:

C++ 网络编程、Qt GUI 开发、epoll、Reactor、自定义协议、文件传输、粘包处理、CS网络架构等内容。

相关推荐
码匠许师傅13 小时前
【C++ 面试真题】聊聊 C++ 的虚函数和多态
java·c++·面试
晴天1613 小时前
Cordis 框架代码核心解析:一个可逆插件系统的实现-Day18
人工智能·ai·架构
djjjx.14 小时前
【 C++ 】多态
开发语言·c++·多态
小新讲网安14 小时前
HTTP请求走私攻击实战:CL.TE与TE.CL绕过前端服务器全解析
服务器·前端·网络·web安全·http·架构·漏洞
艾莉丝努力练剑14 小时前
【QT:解决问题】Qt5Core.dll:无法定位程序输入点
java·开发语言·qt·学习·面试
鸿芯微控科技14 小时前
MFC关断后还有流量怎么办?零流量、阀门泄漏、压差与Python分析
c++·python·mfc·质量流量控制器·关断泄漏·零流量测试
ShineWinsu1 天前
对于C++:C++11中lambda、function、bind的解析
c++·面试·笔试·开发·lambda·bind·function
码匠许师傅1 天前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
旖旎夜光1 天前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
汉字萌萌哒1 天前
2024CSP-J入门级C++真题详解
开发语言·c++