第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

相关文章

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

Linux之UDP和TCP报头管理方式

《Linux之UDP和TCP报头管理方式》文章系统讲解了传输层协议UDP与TCP的核心区别:UDP无连接、不可靠,适合实时传输(如视频),通过端口号标识应用;TCP有连接、可靠,通过确认应答、序号、窗... 目录一、关于端口号1.1 端口号的理解1.2 端口号范围的划分1.3 认识知名端口号1.4 一个进程

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核