尽管 Boost.Asio 可以异步处理任何类型的数据,但它主要用于网络编程。这是因为 Boost.Asio 早在添加额外的 I/O 对象之前就支持网络功能。网络函数非常适合异步操作,因为通过网络传输数据可能需要很长时间,这意味着确认和错误可能不会像发送或接收数据的函数那样快。
Boost.Asio 提供了许多 I/O 对象来开发网络程序。示例 32.5 使用类 boost::asio::ip::tcp::socket 与另一台计算机建立连接。此示例向网络服务器发送 HTTP 请求以下载主页。
示例 32.5。带有 boost::asio::ip::tcp::socket 的网络客户端
- #include <boost/asio/io_service.hpp>
- #include <boost/asio/write.hpp>
- #include <boost/asio/buffer.hpp>
- #include <boost/asio/ip/tcp.hpp>
- #include <array>
- #include <string>
- #include <iostream>
-
- using namespace boost::asio;
- using namespace boost::asio::ip;
-
- io_service ioservice;
- tcp::resolver resolv{ioservice};
- tcp::socket tcp_socket{ioservice};
- std::array<char, 4096> bytes;
-
- void read_handler(const boost::system::error_code &ec,
- std::size_t bytes_transferred)
- {
- if (!ec)
- {
- std::cout.write(bytes.data(), bytes_tr