【发布时间】:2011-07-26 01:26:24
【问题描述】:
所以我需要某种方法将给定的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?
【问题讨论】:
-
基本上,您首先需要解析您的协议字符串(与其含义无关),然后,一旦您拥有主机部分,您就必须执行名称解析(我会使用
getaddrinfo) .由于我不了解 boost ASIO,因此我不会将此作为答案,而仅作为建议。
标签: c++ boost-asio ip-address resolve