Skip to content

Releases: ottercoconut/LinuxChat

LinuxChat v2.0.0 Linux程序设计课程设计作业

Choose a tag to compare

@ottercoconut ottercoconut released this 25 Jun 08:16

LinuxChat v2.0.0

版本概览

本版本完成了 LinuxChat C 语言原生版的主要功能闭环,覆盖注册登录、好友私聊、群聊、拉黑、离线未读提示、数据库持久化、协议稳定性、安全加固、macOS 构建适配和完整测试文档同步。项目当前已进入课程设计可交付状态。

新增功能

  • 支持用户名注册与登录,用户 ID 调整为 8 位随机数字。
  • 支持基于用户名添加好友、添加群成员、拉黑和解除拉黑。
  • 新增群聊能力:
    • 创建群聊
    • 查询群聊列表
    • 查询群成员
    • 添加群成员
    • 群聊文本消息
    • 群消息持久化
  • 新增好友上线/离线通知。
  • 新增私聊和群聊离线未读提示。
  • 新增拉黑与解除拉黑流程,私聊发送前会检查屏蔽关系。
  • 新增服务端优雅退出,支持 SIGINT / SIGTERM

修复与稳定性

  • 修复登录后聊天链路问题,包括接收线程启动时机、聊天页切换和在线会话同步。
  • 修复实时消息用户名、时间戳和群聊刷新问题。
  • 修复协议前缀解析偏移问题。
  • 修复注册成功误报问题。
  • 修复重复好友、重复群成员、重复拉黑/解除拉黑等关系型操作的幂等处理。
  • 修复解除拉黑权限提示和被拉黑场景下的客户端反馈。
  • 修复 TCP 粘包/拆包风险:
    • 客户端发送命令统一追加换行帧边界。
    • 服务端维护连接级接收缓冲区,按完整行解析协议命令。

安全加固

  • 注册、登录和关键数据库写入改为 MySQL 预处理语句。
  • 密码使用 SHA2(..., 256) 哈希存储。
  • 好友、消息、群聊、拉黑等操作以登录会话用户 ID 为准,不信任客户端声明的 user_id/sender_id。
  • 私聊、群聊历史、群成员查询和群消息发送增加权限校验。
  • 客户端和服务端拒绝会破坏文本协议的分隔符输入。
  • 响应构造和命令解析使用有界写入/限长读取,减少缓冲区风险。

构建与测试

  • 新增 macOS 构建脚本:scripts/build_macos.sh
    • 自动探测 mysql_config
    • 自动配置 GTK3 编译参数
    • 自动设置 MySQL/OpenSSL rpath
  • 新增完整测试入口:tests/run_all_tests.sh
  • 测试覆盖:
    • 客户端/服务端编译检查
    • 服务端会话状态同步
    • 私聊和群聊协议边界
    • TCP 粘包/拆包帧解析
    • 数据库事务、外键、唯一约束
    • SQL 注入防护
    • 会话授权
    • 离线消息统计
    • 可选真实 MySQL 集成测试

文档更新

  • README、操作文档、课程设计报告和测试说明已与当前代码同步。
  • 修正旧文档中关于三字段注册、初始成员 ID 建群、TCP 未处理粘包/拆包等过期描述。
  • 课程设计报告不再内嵌过期源码副本,改为引用仓库真实源码文件。

已知限制

  • 当前仅支持文本消息,不支持图片、文件、语音或视频。
  • 文本协议仍依赖 :, ,, ; 等分隔符,目前通过输入校验规避解析错位。
  • 密码哈希仍使用 MySQL SHA2(..., 256),后续可升级为带盐慢哈希。
  • 传输层未加密,局域网/教学演示环境可用,生产环境仍需 TLS 或其他安全通道。

LinuxChat v1.0.0 Linux程序设计课程设计作业

Choose a tag to compare

@ottercoconut ottercoconut released this 24 Jun 11:52

LinuxChat v1.0.0

这是 LinuxChat 课程设计最终版,一个基于 C 语言、TCP Socket、pthread、MySQL 和 GTK3 的 Linux/macOS 网络即时通信工具。

主要功能

  • 用户注册与登录
  • 好友添加与好友列表
  • 一对一实时聊天
  • 群聊创建、群成员管理和群消息
  • 好友上线/离线通知
  • 用户屏蔽与解除屏蔽
  • 私聊/群聊离线未读提示
  • 聊天记录 MySQL 持久化
  • GTK3 图形客户端
  • 多线程 TCP 服务端

项目结构

源码已整理到项目根目录:

  • client/:GTK3 客户端
  • server/:C 语言服务端
  • database/:MySQL 初始化脚本
  • docs/:操作文档和课程设计报告
  • tests/:回归测试与安全契约测试

验证情况

已通过非数据库完整测试:

./tests/run_all_tests.sh

测试结果:All non-database tests passed.

文档

  • README.md
  • docs/操作文档.md
  • docs/课程设计报告.md

已知限制

  • 文本协议仍依赖分隔符,当前通过拒绝特殊分隔符规避解析问题
  • 密码哈希使用 MySQL SHA2(..., 256),后续可升级为带盐慢哈希
  • TCP 拆包/粘包尚未实现完整消息边界协议