# TestEcho-SSL-Console 演示程序

这是一个基于HP-Socket的SSL服务器和客户端控制台演示程序。

## 项目结构

```
TestEcho-SSL-Console/
├── Server/              # SSL服务器控制台程序
│   ├── main.cpp
│   └── Server.vcxproj
├── Client/              # SSL客户端控制台程序
│   ├── main.cpp
│   └── Client.vcxproj
├── TestEcho-SSL-Console.sln  # VS2022解决方案文件
└── README.md           # 本文件
```

## 功能特性

### 服务器端 (Server)
- 监听端口：5555
- 绑定地址：0.0.0.0（所有网络接口）
- SSL/TLS加密通信
- 接收客户端消息并在控制台显示
- 自动向客户端发送响应消息
- 按 'Q' 键停止服务器

### 客户端 (Client)
- 连接到：127.0.0.1:5555
- SSL/TLS加密通信
- 交互式命令界面
- 命令：
  - **1** - 发送 "hello" 消息到服务器
  - **Q** - 断开连接并退出

## 编译和运行

### 前提条件
- Visual Studio 2022
- HP-Socket源码库
- OpenSSL库（已包含在 `Windows/Dependent/openssl/` 目录中）

### 编译步骤

1. 打开 Visual Studio 2022
2. 打开解决方案文件：`TestEcho-SSL-Console.sln`
3. 选择配置（Debug 或 Release）和平台（x86 或 x64）
4. 生成解决方案（Ctrl+Shift+B）

编译成功后，可执行文件将生成在：
- `Windows/Demo/Debug/x64/` 或 `Windows/Demo/Release/x64/`（64位）
- `Windows/Demo/Debug/x86/` 或 `Windows/Demo/Release/x86/`（32位）

### 运行步骤

#### 方式1：使用命令行

1. **启动服务器**
   ```
   cd Windows\Demo\Debug\x64
   TestEcho-SSL-Console-Server.exe
   ```

2. **启动客户端**（在另一个命令行窗口）
   ```
   cd Windows\Demo\Debug\x64
   TestEcho-SSL-Console-Client.exe
   ```

#### 方式2：从Visual Studio运行

1. 右键点击 Server 项目 -> 设为启动项目
2. 按 F5 或 Ctrl+F5 运行服务器
3. 右键点击 Client 项目 -> 设为启动项目
4. 按 F5 或 Ctrl+F5 运行客户端

## 使用示例

### 服务器端输出示例：
```
========================================
  HP-Socket SSL Server 控制台演示程序
========================================

[服务器] 正在初始化SSL环境...
[服务器] SSL环境初始化成功
[服务器] 正在启动服务器...
[服务器] 准备监听: 0.0.0.0:5555
[服务器] 服务器启动成功，监听端口: 5555
[服务器] 按 'Q' 键停止服务器...

[服务器] 客户端连接: ID=1, 地址=127.0.0.1:12345
[服务器] SSL握手完成: ID=1
[服务器] 接收到消息: ID=1, 内容="hello from client"
[服务器] 发送响应: "hello!"
```

### 客户端输出示例：
```
========================================
  HP-Socket SSL Client 控制台演示程序
========================================

[客户端] 正在初始化SSL环境...
[客户端] SSL环境初始化成功
[客户端] 正在连接服务器 127.0.0.1:5555 ...
[客户端] 连接成功: 本地地址=127.0.0.1:12345
[客户端] SSL握手完成
[客户端] 已连接到服务器，可以开始发送消息

----------------------------------------
命令菜单:
  1 - 发送 'hello' 到服务器
  Q - 断开连接并退出
----------------------------------------
请输入命令: 1
[客户端] 发送消息: "hello"
[客户端] 收到服务器响应: "hello!"
```

## SSL证书说明

本程序使用的SSL证书已经内嵌在代码中（来自 `TestEcho-SSL` 示例项目）：
- 服务器证书：`server.cer` / `server.key`
- 客户端证书：`client.cer` / `client.key`
- CA证书：`ca.crt`
- 密钥密码：123456

这些证书仅用于演示目的，**不应在生产环境中使用**。

## 技术细节

### 核心类和接口
- **CSSLServer**：SSL服务器类
- **CSSLClient**：SSL客户端类
- **CTcpServerListener**：服务器事件监听器接口
- **CTcpClientListener**：客户端事件监听器接口

### SSL配置
- **服务器验证模式**：SSL_VM_PEER | SSL_VM_FAIL_IF_NO_PEER_CERT
- **客户端验证模式**：SSL_VM_PEER
- **加密方式**：使用内存中的PEM格式证书

### 依赖库
- `crypt32.lib` - Windows加密API
- `libssl.lib` - OpenSSL SSL/TLS库
- `libcrypto.lib` - OpenSSL加密库
- `ws2_32.lib` - Windows套接字库

## 故障排除

### 编译错误

1. **找不到OpenSSL头文件**
   - 检查 `Windows/Dependent/openssl/v143/` 目录是否存在
   - 确认项目属性中的包含目录设置正确

2. **链接错误：找不到libssl.lib**
   - 检查 `Windows/Dependent/openssl/v143/[x86|x64]/lib/` 目录
   - 确认项目属性中的库目录设置正确

### 运行时错误

1. **服务器启动失败：端口已被占用**
   - 检查端口5555是否被其他程序占用
   - 使用 `netstat -ano | findstr 5555` 查看端口占用情况

2. **客户端连接失败**
   - 确保服务器已经启动
   - 检查防火墙设置
   - 确认服务器监听的地址和端口正确

3. **SSL握手失败**
   - 检查证书配置是否正确
   - 确认OpenSSL DLL文件在系统路径中

## 相关链接

- HP-Socket项目：https://github.com/ldcsaa/HP-Socket
- OpenSSL官网：https://www.openssl.org/

## 版本信息

- HP-Socket版本：6.0.7
- Visual Studio版本：2022
- 平台工具集：v143
- Windows SDK：10.0

## 许可证

本演示程序遵循HP-Socket项目的Apache License 2.0许可证。
