Files
--hp-socket-TCP--ssl--/Client-Native/main.cpp
2026-01-23 08:39:07 +08:00

130 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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;
}