gpt4 book ai didi

c++ - 在 c++ asio 中,如何为 http 或 https 创建相同的套接字对象(接口(interface)/抽象问题?)

转载 作者:行者123 更新时间:2023-12-02 10:37:43 28 4
gpt4 key购买 nike

我有一个使用 1 个参数的控制台程序 myprog.exe

如果我的参数有 http 子字符串(例如: myprog.exe "http://127.0.0.1/myservice" )我的程序应该连接到 http

如果我的参数有 https 子字符串(例如: myprog.exe "https://127.0.0.1/myservice" )我的程序应该连接到 https

我用 asio https://github.com/chriskohlhoff/asio

如果我使用 http 我使用以下方法创建套接字:

tcp::socket socket(io_context);
connect(socket, endpoint_iterator);
...
asio::write(socket, request);

如果我使用 https,我会使用以下方法创建套接字:
asio::ssl::stream<tcp::socket> socket_ssl(io_context, ctx);
asio::connect(socket_ssl.lowest_layer(), resolver.resolve(resolver_query));
...
asio::write(socket_ssl, request);

我只想使用 1 个套接字对象创建来避免为 http 或 https 编写相同的 asio::write 并简化我的代码。像这样的东西:
bool bIsHttps = true 
my_abstract_socket declaration ????
if (bIsHttps) {
my_abstract_socket = createsocket("https")
} else {
my_abstract_socket = createsocket("http")
}
asio::write(my_abstract_socket, request);

这个问题可以通过抽象/接口(interface)或其他解决方案来解决吗?

最佳答案

bool bIsHttps = Is_ssl(argv[1]);
tcp::socket socket* my_abstract_socket = NULL;
if (bIsHttps) {
my_abstract_socket = new asio::ssl::stream<tcp::socket>(io_context, ctx);
} else {
my_abstract_socket = new tcp::socket socket(io_context);
}
asio::write(*my_abstract_socket, request);

关于c++ - 在 c++ asio 中,如何为 http 或 https 创建相同的套接字对象(接口(interface)/抽象问题?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59533149/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com