Boost.Asio如何使用
时间: 2023-05-18 15:03:41 浏览: 112
Boost.Asio 是一个 C++ 网络编程库,可以用于开发高性能的网络应用程序。使用 Boost.Asio,你可以轻松地实现异步网络编程,包括 TCP、UDP、SSL、HTTP 等协议。
下面是一个简单的 Boost.Asio 示例,演示如何使用异步 TCP 客户端:
```cpp
#include <boost/asio.hpp>
#include <iostream>
using boost::asio::ip::tcp;
int main() {
boost::asio::io_context io_context;
tcp::resolver resolver(io_context);
tcp::resolver::results_type endpoints = resolver.resolve("www.baidu.com", "80");
tcp::socket socket(io_context);
boost::asio::connect(socket, endpoints);
boost::asio::streambuf request;
std::ostream request_stream(&request);
request_stream << "GET / HTTP/1.1\r\n";
request_stream << "Host: www.baidu.com\r\n";
request_stream << "Connection: close\r\n\r\n";
boost::asio::async_write(socket, request,
[](const boost::system::error_code& error, std::size_t bytes_transferred) {
if (!error) {
std::cout << "Sent " << bytes_transferred << " bytes." << std::endl;
} else {
std::cerr << "Error: " << error.message() << std::endl;
}
});
boost::asio::streambuf response;
boost::asio::async_read_until(socket, response, "\r\n",
[&response](const boost::system::error_code& error, std::size_t bytes_transferred) {
if (!error) {
std::istream response_stream(&response);
std::string http_version;
response_stream >> http_version;
std::cout << "HTTP version: " << http_version << std::endl;
} else {
std::cerr << "Error: " << error.message() << std::endl;
}
});
io_context.run();
return 0;
}
```
这个示例中,我们使用了 Boost.Asio 的异步 API,首先通过 DNS 解析获取到百度的 IP 地址,然后连接到百度的 80 端口,发送一个 HTTP GET 请求,最后读取响应并输出 HTTP 版本号。
需要注意的是,Boost.Asio 的异步 API 需要使用 io_context 来驱动事件循环,我们在最后调用 io_context.run() 来启动事件循环。