如何使用 boost::asio 将 URL 转换为 IP 地址?

2024-02-18

所以我需要某种转向方式Protocol://URLorIP:Port串入串ip int port如何使用 boost ASIO 和 Boost Regex 来做这样的事情?或者是否有可能 - 使用获取 IPC++ 网络库 http://cpp-netlib.github.com/(增强候选者) - 注意 - 我们不需要长连接 - 只需 IP。

所以我目前使用这样的代码进行解析

#include <boost/regex.hpp>
#include <vector>
#include <string>

int main(int argc, char** argv)
{
    if (argc < 2) return 0;

    std::vector<std::string> values;
    boost::regex expression(
        //   proto                 host               port
        "^(\?:([^:/\?#]+)://)\?(\\w+[^/\?#:]*)(\?::(\\d+))\?"
        //   path                  file       parameters
        "(/\?(\?:[^\?#/]*/)*)\?([^\?#]*)\?(\\\?(.*))\?"
    );
    std::string src(argv[1]);
    if (boost::regex_split(std::back_inserter(values), src, expression))
    {
        const char* names[] = {"Protocol", "Host", "Port", "Path", "File", 
                "Parameters", NULL};
        for (int i = 0; names[i]; i++)
            printf("%s: %s\n", names[i], values[i].c_str());
    }
    return 0;
}

我应该在我的小程序中添加什么来将 URL 解析为 IP?


请记住,任何一个主机名都可能有多个 IP 地址,boost 为您提供了一个将遍历它们的迭代器。

使用方法还是比较简单的,前面加上这个return 0;你的程序:

std::cout << "IP addresses: \n";
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::query query(values[1], "");
for(boost::asio::ip::tcp::resolver::iterator i = resolver.resolve(query);
                            i != boost::asio::ip::tcp::resolver::iterator();
                            ++i)
{
    boost::asio::ip::tcp::endpoint end = *i;
    std::cout << end.address() << ' ';
}
std::cout << '\n';

别忘了#include <boost/asio.hpp>

测试运行:

~ $ g++ -g -Wall -Wextra -pedantic -Wconversion -ansi -o test test.cc -lboost_regex -lboost_system -lboost_thread
~ $ ./test http://www.google.com:7777
Protocol: http
Host: www.google.com
Port: 7777
Path:
File:
Parameters:
IP addresses:
74.125.226.179 74.125.226.176 74.125.226.178 74.125.226.177 74.125.226.180

PS:仅供参考,我打电话过

  • TCP 解析器构造函数 http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/ip__basic_resolver/basic_resolver.html
  • query's 主机/服务构造函数 http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/ip__basic_resolver_query/basic_resolver_query/overload3.html无关服务价值为""
  • 异常抛出解析()的形式 http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/ip__basic_resolver/resolve/overload1.html
  • 取消引用迭代器 http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/ip__basic_resolver_iterator/operator__star_.html获取解析器条目
  • 使用resolver_entry的类型转换为端点 http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/ip__basic_resolver_entry/operator_endpoint_type.html
  • 使用 TCP 端点的地址()访问器 http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/ip__basic_endpoint/address/overload1.html
  • used 运算符显示地址:您可以使用 http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/ip__address_v4/operator_lt__lt_.htmlto_string() http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/reference/ip__address_v4/to_string/overload1.html相反,如果需要的话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 boost::asio 将 URL 转换为 IP 地址? 的相关文章

  • 在编译时查找数组元素位置

    已编辑 大家好 我有一个元素数组 这些元素在程序的所有执行过程中都不会改变 并且其中的项目可以在自己的数组中包含子元素 我必须在处理数组之前准备好它 但是 因为我知道数组不会改变 所以我想将其声明为const 并在编译时准备所有这些 这样我
  • 如何禁用vim的switch case缩进?

    我目前正在与 Vim 作斗争 我似乎无法让缩进选项达到我想要的效果 这是我的设置 我将它们放在 vimrc 的底部以确保它们优先 正如你所看到的 我有点疯狂 所以我尝试关闭几乎所有的东西 set cindent set cinkeys o
  • 使用什么 API 在现有 MFC 应用程序中添加 HTTP 客户端支持?

    我最近接到一项任务 要添加与以下内容交互的能力网络地图服务 http en wikipedia org wiki Web Map Service到现有的 MFC 应用程序 我需要客户端 HTTP API 根据我的研究 领先的候选人似乎是CA
  • 防止重入并确保某些操作获取锁的正确方法是什么?

    我正在设计一个基类 当继承该基类时 它将针对多线程环境中的上下文提供业务功能 每个实例可能都有长时间运行的初始化操作 所以我想让这些对象可重用 为此 我需要能够 为这些对象之一分配上下文以允许其完成工作 防止对象在已有上下文的情况下被分配新
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 多次重定义错误

    在了解了有关类和指针的更多信息后 我重构了一个程序并删除了超过 200 行代码 在此过程中创建了另外两个类 Location and Piece 问题是 在编译完所有内容后 链接器抱怨构造函数Piece被定义了多次 有很多错误 In fun
  • 如何使用 iText7 将 .p7s 字节数组插入 PDF 中?

    我正在尝试将 p7s 字节数组信息插入签名字段 我按照下面的图片操作 我的步骤 准备签名容器 原始PDF是 tmp example pdf 这部分的输出是 results prepared pdf PdfSigner signer new
  • 如何唤醒正在休眠的线程?

    我在加载事件中创建了一个线程 如下所示 Thread checkAlert null bool isStop false private void frmMain Load object sender EventArgs e checkAl
  • 如何有效确保小数值至少有 N 位小数

    我想在进行算术运算之前有效地确保十进制值至少有 N 个位置 在下面的示例中 3 显然我可以格式化 0 000 然后解析 但它的效率相对较低 我正在寻找一种避免与字符串转换的解决方案 我尝试过以下解决方案 decimal d 1 23M d
  • x86 中有加速 SHA (SHA1/2/256/512) 编码的指令吗?

    一个例子 在x86 是硬件加速 AES 的指令集 http en wikipedia org wiki AES instruction set 但是x86中是否有加速SHA SHA1 2 256 512 编码的指令 以及在x86上编码SHA
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • C# 代码自动授予 IIS 对 Windows Server 2008 上文件夹的写入权限?目前抛出异常

    我正在尝试编写一个命令行工具 该工具将为 Windows Server 2008 上的 IIS7 5 提供对 wwwroot 中文件夹的写入权限 以便 Web 应用程序有权写入其基本目录中的特定文件夹 以前 您可以通过在文件夹上分配 IIS
  • 第一次机会异常 - 在内存位置长?

    这是什么 我该如何处理 修复它 First chance exception at 0x756fb727 in Program exe Microsoft C exception long at memory location 0x0018
  • 通过单击内部小部件而不是标题栏来移动窗口

    在 Windows 中 当我创建 QMainWindow 时 我可以通过单击标题栏并拖动它来在屏幕上移动它 在我的应用程序中 我使用隐藏了标题栏setWindowFlags Qt CustomizeWindowHint 我正在尝试使用小部件
  • 委托给子组件的模式

    在我正在工作的产品中 非常基本的场景之一是类的序列化 通常 要序列化的类会在其子组件上调用序列化 例如如果有一个类 s t 班级 A B C D 那么A Pack会调用pack B C D 上的函数 由于有很多这样的类 因此必须一遍又一遍地
  • C# 和匿名对象数组

    这样的表达是什么意思呢 obj DataSource new new Text Silverlight Count 10 Link Tags Silverlight new Text IIS 7 Count 11 Link http iis
  • WPF:Prism 对于小型应用程序来说是不是太过分了?

    如果我不将我的应用程序分成不同的模块 否则我会认为 Prism 确实是可行的方法 我应该使用 Prism 吗 我知道 Prism 提供了一个方便的实现ICommand 我可以自己在一页代码中完成 并为我们提供IEventAggregator
  • 使用 Boost::Spirit 解析 time_period 表达式

    我需要使用 Boost Spirit 解析以下 EBNF 表达式 period date part time part date part time part time part hours minutes seconds date par
  • std::unique_ptr 是否需要知道 T 的完整定义?

    我的标题中有一些代码 如下所示 include
  • 英特尔 SSE:为什么 `_mm_extract_ps` 返回 `int` 而不是 `float`?

    为什么 mm extract ps返回一个int代替float 读单的正确方法是什么float来自 C 中的 XMM 寄存器 或者更确切地说 另一种询问方式是 其相反的是什么 mm set ps操作说明 所有答案似乎都没有真正回答问题 wh

随机推荐

  • stringByAddingPercentEscapesUsingEncoding 转义的字符是什么?

    我不得不从 stringByAddingPercentEscapesUsingEncoding 切换到 CFURLCreateStringByAddingPercentEscapes 因为它不会转义问号 我很好奇它到底转义了什么 以及部分转
  • tee 和 script 本质上是等价的吗?

    在我想要捕捉的上下文中stdout文件中进程的一个 但仍希望在终端中显示此输出 我可以选择script and tee 在这种情况下 这些工具本质上是等效的 还是有一个 可能是微妙的 理由来选择其中一个而不是另一个 节目script and
  • 如何使用 MsBuild 创建可移植数据库?

    我想在我的解决方案中存储一个包含数据库创建脚本的项目 构建此项目时 它必须生成一个数据库文件 然后该数据库文件将在运行时供该解决方案的该项目和其他项目使用 怎么做 我知道我可以添加预构建任务 但我想知道 哪个命令行可以帮助我 也许 sqli
  • 使用 COM Interop 的 VB6 应用程序在 IDE 中工作正常,但编译后的 EXE 崩溃

    我目前正在开发一个 VB6 中的应用程序 该应用程序使用使用 NET 2 0 框架用 C 编写的 COM 互操作库 我使用 regasm exe 使用 codebase 开关从 NET dll 注册 tlb 文件 然后 我能够在 VB6 I
  • 如何在 Python 中为类型起别名?

    在某些 主要是函数式 语言中 您可以执行以下操作 type row list datum or type row datum 这样我们就可以构建这样的东西 type row datum type table row type databas
  • 为什么 Servlet 不是线程安全的? [复制]

    这个问题在这里已经有答案了 我需要知道为什么 servlet 不是线程安全的 Struts 2 0 框架控制器 servlet 是线程安全的原因是什么 我需要知道为什么 servlet 不是线程安全的 由于 Java 编程语言的多线程特性
  • 使用 adb 从损坏的 Android 设备中回收传感器

    我刚刚把我的s3弄坏了 三年前 它是最好的智能手机之一 Question如何通过 USB 获取手机惯性传感器的值 我想使用设备的加速度计 陀螺仪 磁力计 气压计和 GPS 传感器 假设我们想要得到 沿三个轴的原始加速度数据 我连接了 USB
  • Glassfish 5.0 java.lang.NoSuchMethodError

    当我尝试连接谷歌自定义搜索 api glassfish 时抛出 nosuchmethoderror 这就是代码 private int conn String search throws Exception String key mykey
  • HOG:对比度归一化步骤做了什么?

    根据HOG流程 如论文中所述用于人体检测的定向梯度直方图 参见下面的链接 对比归一化步骤是在分箱和加权投票之后完成的 我不明白 如果我已经计算了细胞的加权梯度 那么图像对比度的归一化现在对我有什么帮助 据我了解 对比度归一化是在原始图像上完
  • ggplot (geom_segment) 中的颜色

    使用facet grid时 如何根据数据中的因素对geom segments进行着色 我的方法失败了 因为颜色分配错误 这是一些数据 visual data data frame Values 10 1 Words c yeah what
  • 当我将 URL 添加到列表,然后使用 ajax 时,我尝试在某些 iframe 中显示列表的内容,页面会自行重新加载

    我正在构建一个仪表板 它的小工具是一些指向我想要在 iframe 内显示的不同页面的链接 我有一个按钮可以将新小工具添加到仪表板 添加新小工具后 我刷新仪表板 对于前 3 个小工具 应用程序没有任何问题 并且运行完美 但是 当我想添加第四个
  • 使用 bq 命令行实用程序运行保存的查询

    我有一个 BQ 脚本存储为 已保存的查询 我想知道是否可以使用 bq 命令行实用程序执行它 在文档中找不到相关内容 保存的查询 只能通过控制台访问 不能通过 API 访问 一种可能更适合您的方法是使用脚本和存储过程 https cloud
  • Git 中的致命错误:合并文件的多个阶段条目

    我正在从事我公司的一个生产项目 之前我创建了一个藏匿处并进行了一些更改 然后 当我尝试应用我的藏品时 它产生了冲突 我尝试通过单击每个文件中的 撤消 来重置 Visula Studio 中的所有更改 然后 当我尝试从 git bash 显示
  • 使用 @RequestBody List 的 Spring MVC REST 在语法上返回 HTTP 400

    我正在使用 Spring 4 Jackson 2 并在自定义类上使用 RequestBody 编写了一个功能齐全的 POST 方法 此方法在解组对象时没有任何问题 ResponseBody RequestMapping value stor
  • NSURLConnection、NSURLSession 和 AFNetworking 之间有什么区别? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我想知道它们之间的基本区别是什么 以及在 Objective c 和 swift 中管理 iOS 端 Web 服务的最佳和常见方法是什么 正
  • 如何在 Matlab 中将 PARFOR 与 Core i3 并行 4 工作

    我有适用于 Ubuntu 64 位的 Matlab R2012b 我有一个 Intel Core i3 CPU M 330 2 13GHz 4 我想用parfor同时并行化 4 个循环 因为 Intel Core i3 有 2 个核心和 4
  • Groovy SwingBuilder:更改面板颜色的按钮

    为什么这段代码会失败 我想更改动态构造的一系列多个面板中的一个面板的颜色 面板总数事先未知 由于某种原因 此代码在引用特定面板的名称 例如 panel2 时有效 但在我动态引用它 panelID 时则无效 import groovy swi
  • 如何从视频文件中获取图像

    你好 我是韩国的开发者 我有一些问题 所以我进入这个网站 InputStream is URL url new URL http 112 216 25 58 8888 VOD LAUNCHER media youtube sample3 m
  • 在 SQL 中使用 EXISTS 作为列

    是否可以使用的值EXISTS作为查询的一部分 请注意 不幸的是 由于客户端限制 我需要 SQLServer 2005 兼容的答案 因此 当返回一组结果时 其中一列是一个布尔值 它表明子查询是否会返回任何行 例如 我想返回用户名列表以及不同的
  • 如何使用 boost::asio 将 URL 转换为 IP 地址?

    所以我需要某种转向方式Protocol URLorIP Port串入串ip int port如何使用 boost ASIO 和 Boost Regex 来做这样的事情 或者是否有可能 使用获取 IPC 网络库 http cpp netlib