系统架构
• 客户端:Qt5 + QWidget + QStackedWidget
• 服务器:Linux C++11 + SQLite3 + epoll
• 通信协议:自定义二进制协议(pack 封装)
• 模块划分:
o 客户端 UI 层(ForumWidget)
o 网络管理层(NetworkManager)
o 服务器通信处理(epoll + socket)
o 数据存储层(SQLite3 数据库)
功能介绍
• 注册 / 登录
o 客户端输入用户名、密码
o 发送 TYPE_REGIST / TYPE_LOGIN 请求
o 服务器校验数据库,返回结果
• 帖子列表
o 获取所有用户的帖子,按时间倒序
o 客户端通过 TYPE_POST_LIST 显示
• 发帖
o 用户输入标题+内容
o 客户端发送 TYPE_POST_CREATE
o 服务器写入 SQLite3
• 查看帖子
o 选择帖子 → 发送 TYPE_POST_VIEW
o 返回帖子内容+评论列表
• 评论
o 输入评论 → TYPE_POST_COMMENT
• 修改/删除帖子
o TYPE_POST_EDIT / TYPE_POST_DELETE
o 服务器检查用户 ID 是否匹配,允许操作
通信协议设计
• 数据包结构:
• [ pack_size | type | back | payload ]
o pack_size:总长度
o type:请求/响应类型
o back:成功 / 失败标识
o payload:变长数据 (UTF-8,前置长度)
数据库设计
• users
• id INTEGER PRIMARY KEY
• username TEXT UNIQUE
• password TEXT
• created_at DATETIME
• posts
• id INTEGER PRIMARY KEY
• user_id INTEGER
• title TEXT
• content TEXT
• created_at DATETIME
• comments
• id INTEGER PRIMARY KEY
• post_id INTEGER
• user_id INTEGER
• content TEXT
• created_at DATETIME
客户端实现
• UI 设计
o ForumWidget:QStackedWidget 实现登录页 & 主页面切换
o 帖子列表页 + 帖子详情页
• 网络通信
o NetworkManager:封装 QTcpSocket
o 自动分包/组包,发送 & 解析协议
• 交互逻辑
o UI 点击 → 调用 NetworkManager → 服务器响应 → 更新 UI
服务器实现
• TCP 通信
o 使用 epoll + 非阻塞 IO
• 请求处理
o 根据 type 分发(登录、发帖、评论…)
o 访问 SQLite3 进行增删改查
• 响应
o 打包成 pack 返回客户端