boost asio使用

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
void TestHttps(const char *host)
{
boost::asio::io_service io;
ip::tcp::resolver resolver(io); // handle DNS ?
ip::tcp::resolver::query query(host, "443");
boost::asio::ssl::context ctx(boost::asio::ssl::context::sslv23);
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> sock(io, ctx);
boost::asio::streambuf response;
response.prepare(100);
resolver.async_resolve(query, [&](const boost::system::error_code &ec, ip::tcp::resolver::iterator iter)
{
printf("resolve %s", ec.message().c_str());
if (iter != ip::tcp::resolver::iterator())
{
/* code */
async_connect(sock.lowest_layer(), iter, [&](const boost::system::error_code &ec2, ip::tcp::resolver::iterator iter2)
{
printf("connect %s %s", iter2->endpoint().address().to_string().c_str(), ec2.message().c_str());
if (!ec2)
{
//ssl建连
sock.async_handshake(boost::asio::ssl::stream_base::client, [&](const boost::system::error_code &ec3)
{

printf("ssl handshake %s", ec3.message().c_str());
if (!ec3)
{
//发送http请求
string req = "GET / HTTP/1.1\r\nAccept: */*\r\nHost: " + query.host_name() + "\r\n\r\n";
printf("send http request \n%s", req.c_str());
boost::asio::async_write(sock, boost::asio::buffer(req.c_str(), req.size()), [&](const boost::system::error_code &ec4, std::size_t bytes_transferred)
{
printf("send http %s,bytes_transferred:%d", ec4.message().c_str(),bytes_transferred);
if (bytes_transferred > 0)
{
//接收http返回
boost::asio::async_read(sock, response, [&](const boost::system::error_code &ec5, std::size_t bytes_transferred)
{
printf("recv http %s,bytes_transferred:%d", ec5.message().c_str(), bytes_transferred);
if (bytes_transferred > 0)
{
//printf("recv http content:%s", response.data().);
} });
}
});
} });
}
});
}

while (iter != ip::tcp::resolver::iterator())
{
printf("resolve %s\n", iter->endpoint().address().to_string().c_str());
++iter;
} });

io.run();
printf("io_service release\n");
}
nephen wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!