1 Poco::Net::DNS
namespace Poco {
namespace Net {
class Net_API DNS {
public:
static HostEntry hostByName(const std::string& hostname);
static HostEntry hostByAddress(const IPAddress& address);
static HostEntry resolve(const std::string& address);
static IPAddress resolveOne(const std::string& address);
static HostEntry thisHost();
static std::string hostName();
};
}
}
HostEntry 中存儲 host primary name(canonical name)、alias name list、IP address list。
2 相關 API
得到一個 HostEntry 實 例:
const HostEntry& entry = DNS::hostByName ("google.com");
輸出域名:
std::cout << entry.name() << std::endl;
Address 和 Alias:
const HostEntry::AliasList& aliases = entry.aliases();
const HostEntry::AddressList& addrs = entry.addresses();
3 Source code
POCO 的官方文檔中的 Sample 有錯誤,以下提供一個正確的示例, 其中域名是通過參數傳入的。
#include "Poco/Net/DNS.h"
#include <iostream>
using Poco::Net::DNS;
using Poco::Net::IPAddress;
using Poco::Net::HostEntry;
int main(int argc, char** argv)
{
if (argc != 2) {
std::cout << "Invalid argument number." <<
std::endl;
}
const HostEntry& entry = DNS::hostByName(argv[1]);
std::cout << "Canonical Name: " << entry.name()
<< std::endl;
const HostEntry::AliasList& aliases = entry.aliases();
for (HostEntry::AliasList::const_iterator it = aliases.begin();
it != aliases.end(); ++it)
std::cout << "Alias: " << *it << std::endl;
const HostEntry::AddressList& addrs = entry.addresses();
for (HostEntry::AddressList::const_iterator it = addrs.begin();
it != addrs.end(); ++it)
std::cout << "Address: " << it->toString()
<< std::endl;
return 0;
}
編譯:
$ g++ name_solver.cpp -o name_solver \
-I/usr/local/include -I/usr/local/lib -lPocoNet
運行:
$ ./name_solver baidu.com Canonical Name: baidu.com Address: 123.125.114.144 Address: 123.125.114.144 Address: 220.181.111.85 Address: 220.181.111.85 Address: 220.181.111.86 Address: 220.181.111.86 $ ./name_solver www.ustc.edu.cn Canonical Name: ustc.edu.cn Address: 202.38.64.246 Address: 202.38.64.246
來自柳大的CSDN博客: Blog.CSDN.net/Poechant