第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()) 
{//终于得到一个endpointasio::ip::tcp::endpoint ep = *it;
}

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/474791.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装faiss环境教程

文章目录 打开环境安装faiss环境检查已安装的环境切换环境至faiss 打开环境 source activate # 打开环境安装faiss环境 conda create -n faiss_env # 安装faiss环境检查已安装的环境 conda info --envs # 检查已安装的环境切换环境至faiss conda a…

谷歌浏览器输入地址后http自动转https解决方法

谷歌浏览器输入地址后http自动转https解决方法 点击地址栏旁边的锁&#xff0c;再点击网络设置往下拉&#xff0c;找到&#xff1a;不安全内容&#xff0c;默认是屏蔽状态&#xff0c;改为允许状态&#xff0c;再去访问http 点击地址栏旁边的锁&#xff0c;再点击网络设置 往下…

计算机服务器中了_locked勒索病毒怎么办?Encrypted勒索病毒解密数据恢复

随着网络技术的不断发展&#xff0c;数字化办公已经成为企业生产运营的根本&#xff0c;对于企业来说&#xff0c;数据至关重要&#xff0c;但网络威胁无处不在&#xff0c;近期&#xff0c;云天数据恢复中心接到很多企业的求助&#xff0c;企业的计算机服务器遭到了_locked勒索…

Java数字孪生智慧工地数据大屏APP项目源码

目录 智慧工地云平台核心功能 1.劳务管理 2.视频监控 3.安全教育 4.进度管理 5.环境监测 6.塔吊监控 7.升降机监控 8.工地广播 9.深基坑高支模 10.AI识别 11.安全质量 智慧工地建设的价值和意义 危大工程管理 智慧工地聚焦施工现场一线生产活动&#xff0c;利用物…

面试经典150题【1-10】

文章目录 面试经典150题【1-10】88. 合并两个有序数组27.移除元素26.删除有序数组中的重复项80.删除有序数组中的重复项II169.多数元素189.轮转数组121.买卖股票的最佳时机1122. 买卖股票的最佳时机 II55.跳跃游戏![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ff…

【自然语言处理】seq2seq模型—机器翻译

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现&#xff08;实验满分&#xff09;&#xff0c;只展示主要任务实验结果&#xff0c;如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题&#xff0c;也欢…

【c++】拷贝构造函数

1.特征 1.拷贝构造函数是构造函数的一个重载形式。 2.若显示定义了拷贝构造函数&#xff0c;编译器就不会自动生成构造函数了。 3.拷贝构造函数的参数只有一个且必须是类型对象的引用&#xff0c;使用传值方式编译器直接报错&#xff0c;因为会引发无穷递归调用。 4.若未显…

elementui 中 el-date-picker 控制选择当前年之前或者之后的年份

文章目录 需求分析 需求 对 el-date-picker控件做出判断控制 分析 给 el-date-picker 组件添加 picker-options 属性&#xff0c;并绑定对应数据 pickerOptions html <el-form-item label"雨量年份&#xff1a;" prop"date"><el-date-picker …

手写myscrapy(三)

我们现在具体讲解一下主要功能的实现 我们先定义一个接口类 名称&#xff1a;MyObject 主要定义需要实现的方法定义 代码如下&#xff1a; class MyObject(object):start_urls: Optional[list] Nonename: str Nonekeywords Falsecookies : dict Noneencode :str Nonetime…

TypeScript(一):TypeScript基本理解

TypeScript基本理解 为什么使用TS JavaScript发展至今&#xff0c;没有进行数据类型的验证而我们知道&#xff0c;在编程阶段&#xff0c;错误发现的越早越好而TS就解决了JS的这个问题 认识TypeScript TypeScript是拥有类型的JavaScript超级&#xff0c;它可以编译成普通、…

洛谷P8627 饮料换购 题解

#题外话&#xff08;第27篇题解&#xff09;&#xff08;本题为普及-难度&#xff09; #先看题目 题目链接https://www.luogu.com.cn/problem/P8627 #思路&#xff08;用while循环&#xff0c;循环到山穷水尽为止&#xff0c;用一个计数的计量&#xff09; #代码 #include …

数据分析(一) 理解数据

1. 描述性统计&#xff08;summary&#xff09; 对于一个新数据集&#xff0c;首先通过观察来熟悉它&#xff0c;可以打印数据相关信息来大致观察数据的常规特点&#xff0c;比如数据规模&#xff08;行数列数&#xff09;、数据类型、类别数量&#xff08;变量数目、取值范围…