Files
--hp-socket-TCP--ssl--/Client-Native/main.cpp

130 lines
2.8 KiB
C++
Raw Normal View History

2026-01-23 08:39:07 +08:00
// 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;
}