簡體   English   中英

在 C++ asio 中如何為 http 或 https 創建相同的套接字對象(接口/抽象問題?)

[英]in c++ asio how create same socket object for http or https (interface / abstract problem ?)

我有一個使用 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);

這個問題可以用抽象/接口或其他解決方案解決嗎?

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM