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

C++ 在c++;asio如何为http或https创建相同的套接字对象(接口/抽象问题?),c++,oop,boost-asio,asio,C++,Oop,Boost Asio,Asio,我有一个控制台程序myprog.exe,使用1个参数 如果我的参数有http子字符串(例如:myprog.exe)http://127.0.0.1/myservice“)我的程序应该通过http连接 如果我的参数有https子字符串(例如:myprog.exe)https://127.0.0.1/myservice“)我的程序应该通过https连接 我使用asio 如果我使用http,我将使用以下方式创建套接字: tcp::socket socket(io_context); connect(s

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

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

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

我使用asio

如果我使用http,我将使用以下方式创建套接字:

tcp::socket socket(io_context);
connect(socket, endpoint_iterator);
...
asio::write(socket, request);
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);
如果我使用https,我将使用以下方式创建套接字:

tcp::socket socket(io_context);
connect(socket, endpoint_iterator);
...
asio::write(socket, request);
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);
这个问题可以通过抽象/接口或其他解决方案解决吗?

bool bIsHttps=Is_ssl(argv[1]);
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);
tcp::socket socket*my_abstract_socket=NULL; if(bishhttps){ my_abstract_socket=新asio::ssl::stream(io_上下文,ctx); }否则{ my_abstract_socket=新tcp::socket socket(io_上下文); } asio::write(*我的抽象套接字,请求);
bool bIsHttps=Is_ssl(argv[1]);
tcp::socket socket*my_abstract_socket=NULL;
if(bishhttps){
my_abstract_socket=新asio::ssl::stream(io_上下文,ctx);
}否则{
my_abstract_socket=新tcp::socket socket(io_上下文);
}    
asio::write(*我的抽象套接字,请求);

这似乎不起作用。我的visual studio无法从“asio::ssl::stream*”转换为“asio::ip::tcp::socket*”
@fr3948,确切地说,我错了(快速而肮脏的症状)。无论如何,您有两个选项:1-通过从纯虚拟模板类继承,声明纯成员函数,继续这样做:-(2-使用和他的类:-)这些解决方案对我来说太复杂了。Asio已经很难理解,但是没有太多的http类与我的VisualStudio2012一起工作。当我成为一名更好的编码员时,我将研究一个比两个不同套接字更好的解决方案:)@fr3948编程、网络编程、并发编程非常复杂和困难。但是C++、ASIO、Booost、Boost有很大帮助。无论如何,欢迎加入stackoveflow!这似乎不起作用。我的visual studio无法从“asio::ssl::stream*”转换为“asio::ip::tcp::socket*”
@fr3948,确切地说,我错了(快速而肮脏的症状)。无论如何,您有两个选项:1-通过从纯虚拟模板类继承,声明纯成员函数,继续这样做:-(2-使用和他的类:-)这些解决方案对我来说太复杂了。Asio已经很难理解,但是没有太多的http类与我的VisualStudio2012一起工作。当我成为一名更好的编码员时,我将研究一个比两个不同套接字更好的解决方案:)@fr3948编程、网络编程、并发编程非常复杂和困难。但是C++、ASIO、Booost、Boost有很大帮助。无论如何,欢迎加入stackoveflow!