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

2024-02-18 08:28

本文主要是介绍第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对象

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

这篇关于第13章 网络 Page747~749 asio核心类 ip::tcp::resolver的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/720597

相关文章

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

C++实现获取本机MAC地址与IP地址

《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取1.MFC中获取IP和MAC地址获取

C/C++通过IP获取局域网网卡MAC地址

《C/C++通过IP获取局域网网卡MAC地址》这篇文章主要为大家详细介绍了C++如何通过Win32API函数SendARP从IP地址获取局域网内网卡的MAC地址,感兴趣的小伙伴可以跟随小编一起学习一下... C/C++通过IP获取局域网网卡MAC地址通过win32 SendARP获取MAC地址代码#i

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五