第13章 网络 Page747~749 asio核心类 ip::tcp::resolver

3, ip::tcp::resolver

如果新浪的IP地址变了,该怎么办呢?
ip::tcp::resolver 可以帮我们用上www.sina.com.cn,因为它负责将人类可读的多种网址信息,一步
到位地解析成ip::tcp::socket建立连接所需要的ip::tcp::endpoint结构,address类被直接跳过。

实际操作分三步

第一步 准备解析条件。

条件是一个类型 ip::tcp::resolver::query,此处Query作名词解。较难翻译成中文,它支持表达多种地址,我们最关心的是网址加端口的形式:

//step 1: 准备解析条件。条件是一个类型
asio::ip::tcp::resolver::query Q("www.sina.com.cn", "80");

第二步,创建resolver对象,

并调用其resolve()方法,入参是query对象:

//step2:同步解析
asio::ip::tcp::resolver R(ios); //ios : io_service对象
R.resolve(Q);//开始解析

第三步用于取第二步的结果。

resolver::resolve()方法返回的结果类型不是ip::tcp::endpoint,
而是一个iterator 迭代器,
全称在代码中可以写成ip::tcp::resolver::iterator

自称迭代器,是得有一些支持迭代器的行为

(1) 可通过"*"操作取值,也支持"->"操作,指类型也还不是我们想要的endpoint
而是 basic_resolver_entry <tcp>。
    该类提供endpoint()(地址),host_name()(主机名)和service_name()(端口)等方法,
    同时还重载了目标类型为endpoint_type的转换符
    
(2) 解析可能得到多个结果,可通过迭代器的“++”操作实现遍历

(3) 可以判断是否处于结束的空迭代器;默认构造得到的 iterator 就是一个空迭代器

//Step3: 取结果
asio::ip::tcp::resolver::iterator it = R.resolve(Q);
if(it != asio::ip::tcp::resolver::iterator()) 
{
	//终于得到一个endpoint
	asio::ip::tcp::endpoint ep = *it;
}

例子最后一步的"*it",得到的是basic_resolver_entry<tcp> 对象,但通过重载的转换符,
转换成赋值操作中左值所需的endpoint对象

例子代码:解析第二课堂网站

相关推荐

  1. 13 网络 Page749~755 asio核心 ip::tcp::acceptor

    2024-02-18 06:30:01       27 阅读
  2. 13 网络 Page818 UDP(和TCP的比较)

    2024-02-18 06:30:01       24 阅读

最近更新

  1. Linux系统基础命令行指令——Ubuntu

    2024-02-18 06:30:01       0 阅读
  2. 【Android高级UI】计算不规则图形面积

    2024-02-18 06:30:01       0 阅读
  3. Python库 - PyMC3

    2024-02-18 06:30:01       0 阅读
  4. C语言中关键字

    2024-02-18 06:30:01       0 阅读
  5. ios CCPlistFileWritter.m

    2024-02-18 06:30:01       0 阅读
  6. C#实现Winform程序右下角弹窗消息提示

    2024-02-18 06:30:01       0 阅读
  7. 【PyTorch单点知识】自动求导机制的原理与实践

    2024-02-18 06:30:01       0 阅读

热门阅读

  1. 常见的Web前端开发框架推荐

    2024-02-18 06:30:01       35 阅读
  2. express如何挂载前端项目

    2024-02-18 06:30:01       32 阅读
  3. 基于python+django+mysql的小区物业管理系统

    2024-02-18 06:30:01       28 阅读
  4. 使用浅层神经网络进行模式识别

    2024-02-18 06:30:01       31 阅读
  5. vue实现多个下拉框联动(二)

    2024-02-18 06:30:01       30 阅读
  6. kafka-面试题

    2024-02-18 06:30:01       27 阅读
  7. 【矩阵】重塑矩阵

    2024-02-18 06:30:01       37 阅读
  8. ACP科普:IDEAL含义及应用

    2024-02-18 06:30:01       31 阅读
  9. cs400 A03.FirstGi

    2024-02-18 06:30:01       32 阅读