首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用boost::asio将URL转换为IP地址?

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

Stack Overflow用户
提问于 2011-03-30 20:14:37
回答 1查看 10.7K关注 0票数 20

所以我需要一些方法来将给定的Protocol://URLorIP:Port字符串转换成字符串ip port如何用boost ASIO和Boost Regex来做这样的事情?或者有没有可能-使用C++ Net Lib (boost候选)获得IP -注意-我们不需要长连接-仅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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-30 20:57:23

请记住,任何一个主机名都可能有多个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:作为参考,我调用了

使用resolver _entry的resolver_entry constructor

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5486113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档