# 网盘 **Repository Path**: ljc_man/cloud-storage ## Basic Information - **Project Name**: 网盘 - **Description**: eeeeasyyyy - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-04-17 - **Last Updated**: 2025-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 云存储项目代码分析报告 ## 项目概述 这是一个基于C语言开发的云存储系统,采用客户端-服务器架构,支持文件上传、下载、目录管理等功能。项目包含多个版本,展现了开发过程中的迭代演进。 ## 代码量统计 | 版本 | 文件数量 | 代码行数 | 说明 | |------|----------|----------|------| | cmake_test | 92个文件 | 4,534行 | 最完整版本,包含CMake构建支持 | | full-four-building | 约80个文件 | 3,257行 | 四阶段完整构建版本 | | full-three-section | 约60个文件 | 2,774行 | 三阶段版本,功能相对简化 | | full-one-two-section | 约40个文件 | 1,942行 | 早期版本,基础功能实现 | | **总计** | **约272个文件** | **约12,507行** | **所有版本代码总量** | > 注:统计包含所有.c和.h源代码文件,不包括编译生成的文件和测试数据文件。 ## 技术栈分析 ### 核心技术 - **编程语言**: C语言 - **网络编程**: Socket编程,使用TCP协议 - **并发处理**: pthread线程池 - **I/O多路复用**: epoll机制 - **数据库**: MySQL (用于用户管理和文件元数据) - **加密**: - 密码加密:crypt函数 - SSL/TLS:OpenSSL库 - 文件完整性:MD5校验 - **身份认证**: JWT (JSON Web Token) - **构建系统**: - Makefile (传统构建) - CMake (现代构建系统) ### 依赖库 - **网络安全**: libssl, libcrypto - **JWT处理**: libl8w8jwt, libmbedcrypto, libmbedx509 - **数据库**: libmysqlclient - **系统**: pthread, crypt ## 项目结构分析 ### 目录结构 ``` cloud-storage-master/ ├── cmake_test/ # CMake构建版本 ├── full-four-building/ # 完整四阶段构建版本 ├── full-one-two-section/ # 一二阶段版本 ├── full-three-section/ # 三阶段版本 └── testfile/ # 测试文件 ``` ### 核心模块结构 #### 客户端模块 - **client.c**: 主程序入口,处理用户交互 - **login.c/h**: 用户登录注册功能 - **InternetOperator.c/h**: 网络操作封装 - **Train.c/h**: 数据传输协议 - **Analysis.c/h**: 命令解析 - **Stack.c/h**: 路径栈管理 - **文件操作模块**: - putsDispose.c/h: 文件上传 - getsDispose.c/h: 文件下载 - lsDispose.c/h: 目录列表 - cdDispose.c/h: 目录切换 - mkdirDispose.c/h: 创建目录 - rmdirDispose.c/h: 删除目录 - rmfileDispose.c/h: 删除文件 - pwdDispose.c/h: 显示当前路径 #### 服务端模块 - **server.c**: 服务器主程序 - **PthreadPool.c/h**: 线程池管理 - **PthreadArry.c/h**: 线程数组 - **ReadyQueue.c/h**: 就绪队列 - **UserLink.c/h**: 用户连接管理 - **LongCommand.c/h**: 长时间命令处理 - **ShortCommand.c/h**: 短时间命令处理 - **singleThreadFunc.c/h**: 单线程功能 - **JWT模块**: - encode.c/h: JWT编码 - decode.c/h: JWT解码 - **用户管理**: - registered.c/h: 用户注册 - usrchart.c/h: 用户图表 - **文件操作模块**: 与客户端对应的服务端处理 ## 版本差异分析 ### 1. cmake_test版本 - **特点**: 使用CMake构建系统 - **功能**: 最完整的功能实现 - **技术**: 包含JWT认证、MySQL数据库、完整的文件操作 - **构建**: 支持CMake和Makefile双重构建 ### 2. full-four-building版本 - **特点**: 四阶段完整构建版本 - **差异**: 与cmake_test版本功能基本相同 - **构建**: 主要使用Makefile构建 - **额外文件**: 包含一些测试文件和调试代码 ### 3. full-three-section版本 - **特点**: 三阶段版本,功能相对简化 - **差异**: 可能缺少某些高级功能 - **结构**: 基本的客户端-服务器架构 ### 4. full-one-two-section版本 - **特点**: 早期版本,功能最基础 - **差异**: - 包含netdisk目录(实际存储目录) - 功能相对简单 - 可能缺少JWT认证等高级功能 ## 核心功能分析 ### 1. 用户认证系统 - **注册**: 使用salt+crypt进行密码加密存储 - **登录**: 密码验证,生成JWT token - **会话管理**: 基于JWT的无状态认证 ### 2. 文件传输协议 ```c typedef struct{ int length; // 数据长度 char data[1024]; // 数据内容 }Train; ``` - 自定义的数据包格式 - 支持大文件分块传输 - 包含长度字段确保数据完整性 ### 3. 并发处理架构 - **线程池**: 预创建固定数量的工作线程 - **任务队列**: 使用就绪队列管理待处理任务 - **epoll**: I/O多路复用处理多客户端连接 - **互斥锁**: 保护共享资源 ### 4. 文件操作 - **上传**: 支持断点续传,MD5校验 - **下载**: 分块下载,支持大文件 - **目录管理**: 完整的目录操作支持 - **权限控制**: 基于用户的文件访问控制 ## 模块调用关系 ### 客户端调用流程 ``` client.c (主程序) ├── login.c (用户认证) ├── Analysis.c (命令解析) ├── InternetOperator.c (网络操作) └── 各种Dispose模块 (具体功能实现) ├── putsDispose.c (文件上传) ├── getsDispose.c (文件下载) ├── lsDispose.c (目录列表) └── ... ``` ### 服务端调用流程 ``` server.c (主程序) ├── PthreadPool.c (线程池管理) │ ├── LongCommand.c (长命令处理) │ └── ShortCommand.c (短命令处理) ├── decode.c (JWT验证) ├── registered.c (用户注册) └── 各种Dispose模块 (服务端处理) ``` ## 启动方式 ### 编译构建 #### 使用CMake (推荐) ```bash # 客户端 cd cmake_test/client mkdir build && cd build cmake .. make # 服务端 cd cmake_test/server mkdir build && cd build cmake .. make ``` #### 使用Makefile ```bash # 客户端 cd cmake_test/client make # 服务端 cd cmake_test/server make ``` ### 运行 ```bash # 启动服务端 (需要指定线程数) ./server 4 # 启动客户端 ./client ``` ### 环境要求 - MySQL数据库服务 - 相关依赖库安装 - Linux/Unix环境 ## 改进建议 ### 1. 代码质量改进 - **错误处理**: 增强错误处理机制,添加更详细的错误信息 - **内存管理**: 检查内存泄漏,完善资源释放 - **代码规范**: 统一代码风格,添加更多注释 - **模块化**: 进一步模块化,减少代码重复 ### 2. 安全性增强 - **输入验证**: 加强用户输入验证,防止注入攻击 - **传输安全**: 全程使用TLS加密传输 - **访问控制**: 实现更细粒度的权限控制 - **审计日志**: 添加操作审计功能 ### 3. 性能优化 - **缓存机制**: 添加文件元数据缓存 - **压缩传输**: 实现文件压缩传输 - **连接池**: 实现数据库连接池 - **异步I/O**: 考虑使用异步I/O提升性能 ### 4. 功能扩展 - **文件版本控制**: 支持文件版本管理 - **文件分享**: 实现文件分享功能 - **同步机制**: 添加文件同步功能 - **Web界面**: 开发Web管理界面 ### 5. 部署和运维 - **配置文件**: 使用配置文件管理系统参数 - **日志系统**: 完善日志记录和轮转 - **监控告警**: 添加系统监控和告警 - **容器化**: 支持Docker容器化部署 ### 6. 跨平台支持 - **Windows支持**: 适配Windows平台 - **构建系统**: 完善CMake配置,支持多平台构建 - **依赖管理**: 简化依赖库安装过程 ## 总结 这是一个功能相对完整的云存储系统项目,展现了从基础到完善的开发过程。项目采用了现代C语言开发的最佳实践,包括线程池、epoll、JWT认证等技术。虽然功能基本完整,但在代码质量、安全性和性能方面仍有较大改进空间。建议在现有基础上进行重构和优化,使其更适合生产环境使用。