一、boost版本1.69.0
用cmake构建项目时,预定义宏BOOST_ASIO_NO_DEPRECATED以此来使用最新API接口
target_compile_definitions(boost
INTERFACE
-DBOOST_DATE_TIME_NO_LIB
-DBOOST_REGEX_NO_LIB
-DBOOST_CHRONO_NO_LIB
-DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE
-DBOOST_ASIO_NO_DEPRECATED)
二、直接上代码
#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
#include <boost/array.hpp>
#if BOOST_VERSION >= 106600
boost::asio::io_context io_service;
#else
boost::asio::io_service io_service;
#endif
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::socket sock(io_service);
boost::array<char, 4096> buffer;
void read_handler(const boost::system::error_code &ec, std::size_t bytes_transferred)
{
if (!ec)
{
std::cout << std::string(buffer.data(), bytes_transferred) << std::endl;
sock.async_read_some(boost::asio::buffer(buffer), read_handler);
}
}
void connect_handler(const boost::system::error_code &ec)
{
if (!ec)
{
boost::asio::write(sock, boost::asio::buffer("GET / HTTP 1.1\r\nHost: highscore.de\r\n\r\n"));
sock.async_read_some(boost::asio::buffer(buffer), read_handler);
}
}
#if BOOST_VERSION >= 106600
void resolve_handler(const boost::system::error_code &ec, boost::asio::ip::tcp::resolver::results_type results)
{
if (!ec)
{
sock.async_connect(results.begin()->endpoint(), connect_handler);
}
}
#else
void resolve_handler(const boost::system::error_code &ec, boost::asio::ip::tcp::resolver::iterator it)
{
if (!ec)
{
sock.async_connect(*it, connect_handler);
}
}
#endif
int main()
{
#if BOOST_VERSION >= 106600
boost::system::error_code ec;
boost::asio::ip::tcp::resolver resolver(io_service);
#if 1
//方法1:
boost::asio::ip::tcp::resolver::results_type results = resolver.resolve(boost::asio::ip::tcp::v4(), "www.highscore.de", "80", ec);
if (!ec)
{
sock.async_connect(results.begin()->endpoint(), connect_handler);
}
#else
//方法2:
resolver.async_resolve("www.highscore.de", "80", resolve_handler);
#endif
#else
boost::asio::ip::tcp::resolver::query query("www.highscore.de", "80");
resolver.async_resolve(query, resolve_handler);
#endif
io_service.run();
system("pause");
}
三、关于版本问题
version:1_66
BOOST_VERSION % 100 is the patch level 106600%100=0
BOOST_VERSION / 100 % 1000 is the minor version 106600/100%1000=66
BOOST_VERSION / 100000 is the major version 106600/100000=1
所以从1.66.0版本开始,API就开始翻新。