备份-基础ssl通信
This commit is contained in:
180
Client-Native/README_REFACTOR.md
Normal file
180
Client-Native/README_REFACTOR.md
Normal file
@@ -0,0 +1,180 @@
|
||||
# Client-Native (重构版) - 现代化项目结构
|
||||
|
||||
## 项目说明
|
||||
|
||||
这是 Client-Native 项目的重构版本,采用现代 C++ 项目管理标准,将原本 462 行的单一 `main.cpp` 文件重构为模块化的多文件结构。
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
Client-Native/
|
||||
├── main.cpp # 主程序入口(122行)
|
||||
├── pch.h / pch.cpp # 预编译头文件
|
||||
├── CertificateConfig.h/.cpp # 证书配置模块
|
||||
├── CertificateManager.h/.cpp # 证书管理模块
|
||||
├── SSLClientConnection.h/.cpp # SSL客户端连接模块
|
||||
├── main.cpp.backup # 原始文件备份
|
||||
└── README_REFACTOR.md # 本文件
|
||||
```
|
||||
|
||||
## 模块说明
|
||||
|
||||
### 1. **CertificateConfig** - 证书配置
|
||||
- **职责**: 存储和提供SSL证书数据
|
||||
- **文件**: `CertificateConfig.h`, `CertificateConfig.cpp`
|
||||
- **特点**:
|
||||
- 静态方法访问证书数据
|
||||
- 包含客户端证书、私钥、CA证书和密码
|
||||
- 单一职责:证书数据管理
|
||||
|
||||
### 2. **CertificateManager** - 证书管理器
|
||||
- **职责**: 加载和解析证书
|
||||
- **文件**: `CertificateManager.h`, `CertificateManager.cpp`
|
||||
- **功能**:
|
||||
- 从内存加载 X509 证书
|
||||
- 从内存加载加密私钥
|
||||
- 打印 OpenSSL 错误信息
|
||||
- **特点**: 无状态工具类,可复用
|
||||
|
||||
### 3. **SSLClientConnection** - SSL客户端连接
|
||||
- **职责**: 封装完整的SSL客户端通信逻辑
|
||||
- **文件**: `SSLClientConnection.h`, `SSLClientConnection.cpp`
|
||||
- **功能**:
|
||||
- 初始化 SSL 环境
|
||||
- 建立到服务器的 SSL 连接
|
||||
- 发送和接收加密数据
|
||||
- 资源管理(RAII模式)
|
||||
- **特点**:
|
||||
- 使用构造函数/析构函数管理资源
|
||||
- 禁用拷贝构造和赋值操作
|
||||
- 提供清晰的公共接口
|
||||
|
||||
### 4. **main.cpp** - 应用程序入口
|
||||
- **职责**: 用户交互和流程控制
|
||||
- **行数**: 从 462 行减少到 122 行
|
||||
- **功能**:
|
||||
- 控制台初始化
|
||||
- 创建和管理 SSLClientConnection 对象
|
||||
- 用户命令处理
|
||||
- 主事件循环
|
||||
|
||||
## 改进之处
|
||||
|
||||
### 🎯 单一职责原则(SRP)
|
||||
- 每个类只负责一个功能领域
|
||||
- 易于理解和维护
|
||||
|
||||
### 🔒 封装性
|
||||
- 私有成员和公共接口清晰分离
|
||||
- 隐藏实现细节
|
||||
|
||||
### ♻️ 资源管理(RAII)
|
||||
- SSLClientConnection 自动管理 SSL 资源
|
||||
- 析构函数确保资源正确释放
|
||||
- 无需手动调用 Cleanup
|
||||
|
||||
### 📦 模块化
|
||||
- 代码按功能分组到不同文件
|
||||
- 便于单元测试
|
||||
- 易于复用(例如 CertificateManager 可用于其他项目)
|
||||
|
||||
### 🚫 消除全局变量
|
||||
- 原版使用全局 `g_ssl_ctx`, `g_ssl`, `g_socket`
|
||||
- 重构版所有状态封装在对象内部
|
||||
|
||||
### 📋 命名规范
|
||||
- 类名使用 PascalCase
|
||||
- 函数名使用 PascalCase
|
||||
- 私有成员使用 `m_` 前缀
|
||||
|
||||
## 对比统计
|
||||
|
||||
| 指标 | 原版 | 重构版 | 改进 |
|
||||
|------|------|--------|------|
|
||||
| main.cpp 行数 | 462 | 122 | -73.6% |
|
||||
| 源文件数量 | 1 | 4 | +300% |
|
||||
| 全局变量 | 3 | 0 | -100% |
|
||||
| 类数量 | 0 | 3 | +3 |
|
||||
| 代码复用性 | 低 | 高 | ⬆️ |
|
||||
| 可测试性 | 低 | 高 | ⬆️ |
|
||||
|
||||
## 编译和运行
|
||||
|
||||
项目仍然使用相同的编译配置:
|
||||
- Visual Studio 2022
|
||||
- 平台工具集: v143
|
||||
- OpenSSL 14x (x64/x86)
|
||||
- 静态链接运行时库 (MTd/MT)
|
||||
|
||||
### 编译步骤
|
||||
1. 打开 `TestEcho-SSL-Console.sln`
|
||||
2. 选择 `Client-Native` 项目
|
||||
3. 选择配置(Debug/Release)和平台(x64/x86)
|
||||
4. 点击 "生成"
|
||||
|
||||
### 运行
|
||||
运行方式与原版完全相同:
|
||||
```bash
|
||||
.\Client-Native.exe
|
||||
```
|
||||
|
||||
## 依赖关系
|
||||
|
||||
```
|
||||
main.cpp
|
||||
├─> SSLClientConnection
|
||||
│ ├─> CertificateManager
|
||||
│ └─> CertificateConfig
|
||||
└─> CertificateConfig
|
||||
```
|
||||
|
||||
## 功能保持一致
|
||||
|
||||
重构版本保持与原版完全相同的功能:
|
||||
- ✅ SSL_VM_PEER 双向认证
|
||||
- ✅ 使用内存中的证书(无需文件)
|
||||
- ✅ 连接到 127.0.0.1:5555
|
||||
- ✅ 发送 "hello" 消息
|
||||
- ✅ 接收并显示服务器响应
|
||||
- ✅ UTF-8 中文支持
|
||||
- ✅ 非阻塞数据接收
|
||||
- ✅ 交互式命令菜单
|
||||
|
||||
## 未来扩展方向
|
||||
|
||||
这种模块化结构便于以下扩展:
|
||||
1. **配置文件支持**: 将 CertificateConfig 改为从文件读取
|
||||
2. **日志系统**: 添加 Logger 类统一管理输出
|
||||
3. **异步 IO**: 使用 `std::async` 或线程池处理网络 IO
|
||||
4. **异常处理**: 使用异常代替返回值错误处理
|
||||
5. **智能指针**: 使用 `std::unique_ptr` 管理 SSL 对象
|
||||
6. **配置类**: 抽象服务器地址、端口为配置对象
|
||||
|
||||
## 学习要点
|
||||
|
||||
### 对比学习建议
|
||||
1. **原始版本** (`main.cpp.backup`): 了解底层 OpenSSL + Winsock API
|
||||
2. **重构版本**: 学习现代 C++ 项目组织和设计模式
|
||||
|
||||
### 设计模式
|
||||
- **RAII** (Resource Acquisition Is Initialization): SSLClientConnection
|
||||
- **Static Factory**: CertificateConfig 静态方法
|
||||
- **Manager Pattern**: CertificateManager
|
||||
|
||||
### C++ 最佳实践
|
||||
- 禁用不需要的特殊成员函数(拷贝构造/赋值)
|
||||
- 使用 `const` 限定常量方法
|
||||
- 头文件保护(`#pragma once`)
|
||||
- 命名空间管理(`namespace SSLClient`)
|
||||
|
||||
## 总结
|
||||
|
||||
这次重构展示了如何将"一个文件实现所有功能"的代码转变为遵循现代 C++ 最佳实践的模块化项目。虽然行数增加了(因为增加了头文件和模块边界),但代码的**可读性、可维护性、可测试性**都得到了显著提升。
|
||||
|
||||
对于学习者来说,两个版本都有价值:
|
||||
- **原版**: 快速理解完整流程
|
||||
- **重构版**: 学习工程化实践
|
||||
|
||||
---
|
||||
*重构日期: 2025*
|
||||
*原始项目: TestEcho-SSL-Console/Client-Native*
|
||||
Reference in New Issue
Block a user