00 基本概念
基本概念
asio基于两个概念:
-
I/O服务,抽象了操作系统的异步接口
boost::asio::io_service::service
:boost::asio::io_service
-
I/O对象,有多种对象
boost::asio::basic_io_object
:boost::asio::ip::tcp::socket
boost::asio::ip::tcp::resolver
boost::asio::ip::tcp::acceptor
boost::asio::local::stream_protocol::socket
本地连接boost::asio::posix::stream_descriptor
面向流的文件描述符,比如stdout
,stdin
boost::asio::deadline_timer
定时器boost::asio::signal_set
信号处理
所有 I/O 对象通常都需要一个 I/O 服务作为它们的构造函数的第一个参数,比如:
boost::asio::io_service io_service; |
层次关系
1. boost::asio
io_context
而asio
空间中,我们首先不可避免的就是类io_service
或io_context
。(io_context
这个类是用来替代io_service
的,建议以后直接使用io_context
即可)
这个类非常重要,它相当于我们程序与系统之间I/O
操作的中介,我们所有的接受或发送数据操作,都是通过将需求提交给这个类,然后这个类再交给计算机来执行的。
buffer
除了io_context
外,asio
里面还有一个函数非常重要,那就是buffer
函数,它的作用其实就是构造一个结构体,大致如下:
struct{ |
该网络模块中所有的收发数据操作,都不接受单独的字符串,而是这样一个结构体,分别为缓存区的首地址以及缓存区的大小。
2. boost::asio::ip
asio里面进一步的命名空间ip,我们的TCP和UDP相关类,就在这个ip里面。
namespace | class/function |
---|---|
boost::asio::ip | address |
boost::asio::ip::tcp | socket,acceptor,endpoint |
boost::asio::ip::udp | socket,endpoint |
-
address:网络中的ip地址,最常用的就是它的静态函数
from_string
,将十进制的ip地址转化为网络字节序。 -
socket:网络通信中的socket,用于read/write。
-
acceptor:服务器使用的监听器对象,内部封装了一个socket,用于接受客户端的socket连接
-
endpoint:存储了IP和端口的对象。
发布于