如何将主机名转换为增强地址或端点?

mGu*_*Guv 5 c++ boost

我在Boost上使用的是C ++ Redis库。(https://github.com/nekipelov/redisclient

要连接,我必须给它一个tcp端点:

boost::asio::ip::tcp::endpoint
Run Code Online (Sandbox Code Playgroud)

或地址+端口

boost::asio::ip::address, unsigned short
Run Code Online (Sandbox Code Playgroud)

目前,我以:

boost::asio::ip::address address = boost::asio::ip::address::from_string(someIPVariable);
Run Code Online (Sandbox Code Playgroud)

并将其与端口一起通过,它可以正常工作并连接。但是,我现在需要按主机名而不是IP进行操作。如果仅将主机名放在上面的行中,则会抛出异常,因为我认为它需要IP地址。

我习惯将连接指定为,("IP OR Hostname", port)因此我不太确定这里需要什么。我检查了两者的构造函数,以查看是否可以将主机名+端口转换为所需的名称,但找不到任何内容。

Jon*_*ely 7

您需要使用tcp::resolver做名称解析(即DNS查找):

boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::query query("example.com", "80");
boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(query);
Run Code Online (Sandbox Code Playgroud)

取消引用迭代器将为您提供一个解析器条目,其中包含tcp::endpoint

boost::asio::ip::tcp::endpoint endpoint = iter->endpoint();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,可能会有更多匹配项,并且查询可以异步完成(如果您的IO异步开始很重要) (2认同)