gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:55:32 27 4
gpt4 key购买 nike

所以我需要某种方法将给定的 Protocol://URLorIP:Port 字符串转换为字符串 ip int port 如何做这样的事情使用 boost ASIO 和 Boost Regex?或者是否有可能 - 使用 C++ Net Lib 获取 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?

最佳答案

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

关于c++ - 如何使用 boost::asio 将 URL 转换为 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5486113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com