我在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)因此我不太确定这里需要什么。我检查了两者的构造函数,以查看是否可以将主机名+端口转换为所需的名称,但找不到任何内容。
您需要使用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)