130 lines
2.8 KiB
C++
130 lines
2.8 KiB
C++
// TestEcho-SSL-Console Client-Native (重构版)
|
||
// 纯OpenSSL+Winsock实现的SSL客户端(现代项目结构)
|
||
|
||
#include "pch.h"
|
||
#include "CertificateConfig.h"
|
||
#include "SSLClientConnection.h"
|
||
|
||
using namespace SSLClient;
|
||
|
||
// 服务器配置
|
||
static const char* DEFAULT_ADDRESS = "127.0.0.1";
|
||
static const int DEFAULT_PORT = 5555;
|
||
|
||
/// <summary>
|
||
/// 打印命令菜单
|
||
/// </summary>
|
||
void PrintMenu()
|
||
{
|
||
std::cout << "\n命令菜单:" << std::endl;
|
||
std::cout << " 1 - 发送 \"hello\"" << std::endl;
|
||
std::cout << " q - 退出程序" << std::endl;
|
||
std::cout << "请输入命令: " << std::flush;
|
||
}
|
||
|
||
int SSL_Client() {
|
||
|
||
std::cout << "========================================" << std::endl;
|
||
std::cout << " SSL Client Native (纯OpenSSL+Winsock)" << std::endl;
|
||
std::cout << " 现代化项目结构版本" << std::endl;
|
||
std::cout << "========================================" << std::endl;
|
||
std::cout << std::endl;
|
||
|
||
// 创建SSL客户端连接对象
|
||
SSLClientConnection client;
|
||
|
||
// 初始化SSL环境
|
||
if (!client.Initialize(
|
||
CertificateConfig::GetClientCertificate(),
|
||
CertificateConfig::GetClientPrivateKey(),
|
||
CertificateConfig::GetCACertificate(),
|
||
CertificateConfig::GetKeyPassword()))
|
||
{
|
||
std::cout << "按任意键退出..." << std::endl;
|
||
_getch();
|
||
return 1;
|
||
}
|
||
|
||
// 连接到服务器
|
||
if (!client.Connect(DEFAULT_ADDRESS, DEFAULT_PORT))
|
||
{
|
||
std::cout << "连接失败,按任意键退出..." << std::endl;
|
||
_getch();
|
||
return 1;
|
||
}
|
||
|
||
// 等待连接建立
|
||
|
||
std::cout << "[客户端] 已连接到服务器,可以开始发送消息" << std::endl;
|
||
|
||
// 主循环
|
||
PrintMenu();
|
||
|
||
bool running = true;
|
||
char receiveBuffer[1024];
|
||
|
||
while (running)
|
||
{
|
||
// 检查是否有数据可接收
|
||
int received = client.Receive(receiveBuffer, sizeof(receiveBuffer));
|
||
if (received < 0) {
|
||
// 接收错误,可能连接已断开
|
||
std::cerr << "[错误] 接收数据失败,连接可能已断开" << std::endl;
|
||
break;
|
||
}
|
||
else {
|
||
|
||
}
|
||
|
||
// 检查键盘输入
|
||
if (_kbhit())
|
||
{
|
||
char ch = _getch();
|
||
std::cout << ch << std::endl;
|
||
|
||
if (ch == '1')
|
||
{
|
||
// 发送 "hello"
|
||
if (client.Send("hello"))
|
||
{
|
||
Sleep(100); // 等待服务器响应
|
||
client.Receive(receiveBuffer, sizeof(receiveBuffer)); // 接收响应
|
||
}
|
||
PrintMenu();
|
||
}
|
||
else if (ch == 'q' || ch == 'Q')
|
||
{
|
||
running = false;
|
||
}
|
||
else
|
||
{
|
||
std::cout << "无效命令,请重新输入。" << std::endl;
|
||
PrintMenu();
|
||
}
|
||
}
|
||
|
||
Sleep(100);
|
||
}
|
||
|
||
// 断开连接
|
||
client.Disconnect();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 主函数
|
||
/// </summary>
|
||
int main()
|
||
{
|
||
// 设置控制台UTF-8编码
|
||
SetConsoleOutputCP(CP_UTF8);
|
||
std::locale::global(std::locale("")); // 设置全局区域设置
|
||
|
||
// 运行SSL客户端
|
||
SSL_Client();
|
||
|
||
std::cout << "按任意键退出..." << std::endl;
|
||
_getch();
|
||
|
||
return 0;
|
||
}
|