对于boost库的强大的能力,相信用过boost的人都知道。笔者作用一个小白,今天开始一一探究boost asio库的一些东西,这里着重探究和网络有关的内容。由于之前没有看过asio的源代码,这里不免有疏漏和不足,甚至是错误之处,这里欢迎大家一起来探讨。
boost/asio.hpp. 这里的文件这中好像没有什么特别的东西,只包含了一系列的头文件。我们可以在www.boost.org/libs/asio上看到相关的文档资料。其中有这样一段:
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
估计是有编译器相关的。
asio.hpp的东西没什么可看的,接下来由于我们主要看的是网络相关的东西,那么一下文件自然是tcp.hpp.我们一句一句的来解析这些代码。
首行,它声明了一个basic_endPoint<tcp>的别名 endpoint.从这个形式我们可以知道basic_endpoint是一个端点类的模板。从名字我作出以下端点的假设,首先,网络之中的通讯都是主机与主机之间的,那么我们是否可以认为一个主机就是一个端点呢?下面,让我们来看一下这个模板类(basic_endpoint.hpp).
文档注释是这样写的 The boost::asio::ip::basic_endpoint class template describes an endpoint that may be associated with a particular socket.(boost::asio::ip::basic_endpoint 模板描述了一个可能被一个特别的套接字关联的端点).既然是模板类,必然需要一个抽像数据类型,我们来看template <typename InternetProtocol>从名字可以看到,basic_endpoint的模板参数是一个网络协议。
接下来,basic_endpoint又声明了两个别名,一个是typedef InternetProtocol protocol_type;这是它本身的模板参数,我们不用管,下一个typedef boost::asio::detail::socket_addr_type data_type;这是一个网络地址的类型。我们在这里对于这个网络地址,先