# linux_c_socket_chatroom **Repository Path**: mkirin/linux_c_socket_chatroom ## Basic Information - **Project Name**: linux_c_socket_chatroom - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-19 - **Last Updated**: 2026-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Linux C Socket 聊天室 一个基于 C 语言和 Socket API 实现的多人聊天室,支持端到端加密通信。 ## 功能特性 ### 核心功能 - ✅ 多人实时群聊 - ✅ 端到端加密私聊 - ✅ 公钥自动交换与管理 - ✅ 公钥指纹验证(防中间人攻击) - ✅ 消息自动刷新 - ✅ 优雅的退出机制 ### 安全特性 - 🔒 RSA-2048 密钥对生成 - 🔒 AES-256-GCM 对称加密 - 🔒 公钥指纹验证 - 🔒 防 DoS 攻击(消息大小和频率限制) - 🔒 内存安全(敏感数据零化处理) - 🔒 心跳检测(自动清理不活跃连接) ### 技术特性 - 📊 加密性能统计 - 📋 详细的日志输出 - 🎯 多线程设计 - 📱 跨平台兼容性 ## 技术栈 | 类别 | 技术/库 | 用途 | |------|---------|------| | 编程语言 | C | 核心实现 | | 网络编程 | Socket API | 网络通信 | | 加密库 | OpenSSL | 端到端加密 | | JSON 处理 | cJSON | 消息序列化 | | 数据库 | SQLite3 | 消息存储 | | 多线程 | POSIX pthread | 并发处理 | | 构建工具 | bash 脚本 | 编译构建 | ## 系统要求 ### 依赖项 - **编译工具**:gcc, make - **库文件**: - libpthread-dev (线程支持) - libcjson-dev (JSON 处理) - libsqlite3-dev (数据库支持) - libssl-dev (加密支持) ### 安装依赖(Debian/Ubuntu) ```bash sudo apt-get install build-essential libsqlite3-dev libcjson-dev libssl-dev ``` ## 编译与运行 ### 编译 ```bash ./build.sh ``` ### 运行服务器 ```bash ./chat_server ``` ### 运行客户端 ```bash ./chat_client ``` ## 使用方法 ### 客户端命令 - **直接输入**:发送群聊消息(普通) - **/msg <用户名> <消息>**:发送私聊消息(自动加密) - **/crypto-stats**:查看加密性能统计 - **/quit**:退出聊天室 - **Ctrl+C**:退出程序 ### 服务器命令 - **Ctrl+C**:退出服务器 ## 架构设计 ### 服务器端 - **主线程**:接受连接,创建客户端处理线程 - **客户端处理线程**:处理登录、消息转发、公钥管理 - **心跳检测线程**:检测客户端活跃度,清理 inactive 连接 ### 客户端 - **主线程**:处理用户输入,发送消息 - **工作者线程池**:处理加密/解密任务 - **网络处理**:使用 select 实现多路复用 ## 消息类型 | 类型 | 描述 | 加密方式 | |------|------|----------| | group | 群聊消息 | 不加密 | | private_encrypted | 私聊消息 | AES-256-GCM | | system | 系统消息 | 不加密 | | public_key | 公钥消息 | 不加密 | ## 安全机制 ### 端到端加密流程 1. 客户端生成 RSA-2048 密钥对 2. 客户端登录后发送公钥给服务器 3. 服务器广播公钥给其他客户端 4. 客户端存储其他用户的公钥 5. 发送私聊消息时: - 生成随机 AES-256 密钥 - 使用 AES-GCM 加密消息 - 使用接收方公钥加密 AES 密钥 - 发送加密消息和加密的 AES 密钥 6. 接收方收到消息时: - 使用私钥解密 AES 密钥 - 使用 AES 密钥解密消息 ### 公钥管理 - 公钥自动交换 - 公钥指纹验证 - 公钥变更检测(防中间人攻击) ## 性能统计 ### 加密性能 - RSA 加密次数和平均耗时 - AES 加密次数和平均耗时 - 内存安全擦除次数 ## 项目结构 ``` linux_c_socket_chatroom/ ├── client.c # 客户端主代码 ├── client_crypto.c # 客户端加密模块 ├── client_crypto.h # 客户端加密模块头文件 ├── common.h # 公共头文件 ├── server.c # 服务器主代码 ├── build.sh # 编译脚本 ├── README.md # 项目说明 └── .gitignore # Git 忽略文件 ``` ## 日志说明 ### 日志级别 - ERROR:错误信息 - WARN:警告信息 - INFO:信息信息 - DEBUG:调试信息 ### 日志格式 ``` [时间] [文件名:行号] 消息 ``` ## 常见问题 ### 问题:私聊消息发送失败 **原因**:可能是接收方公钥未找到 **解决**:确保接收方已在线且已发送公钥 ### 问题:客户端无法退出 **原因**:可能是信号处理问题 **解决**:使用 Ctrl+C 或 /quit 命令退出 ### 问题:编译失败 **原因**:可能是缺少依赖库 **解决**:安装所需的依赖库 ## 开发指南 ### 代码风格 - 缩进:4 空格 - 命名:蛇形命名法 - 注释:中文注释 ### 调试技巧 - 使用 DEBUG 级日志 - 查看加密性能统计 - 检查公钥交换日志 ## 贡献 欢迎提交 Issue 和 Pull Request! ## 许可证 MIT License