POCO库中文编程参考指南(9)Poco::Net::DNS

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 1 Poco::Net::DNS namespace Poco { namespace Net { class Net_API DNS { public: static HostEntry hostByName(const std::string& hostname); ...

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

目录
相关文章
|
20天前
|
存储 JSON 开发工具
Visual Studio编程效率提升技巧集(提高.NET编程效率)
Visual Studio编程效率提升技巧集(提高.NET编程效率)
Visual Studio编程效率提升技巧集(提高.NET编程效率)
|
22天前
|
人工智能 物联网 开发工具
.NET技术:多元语言、丰富库与跨平台能力引领软件开发新纪元。
`【7月更文挑战第4天】.NET技术:多元语言、丰富库与跨平台能力引领软件开发新纪元。从企业应用、云服务到游戏开发,其角色日益凸显。随着微软的持续创新与社区合作,未来.NET将在物联网、AI等领域拓宽应用,开发者应把握趋势,共创未来。`
20 0
|
2月前
|
C#
一个库帮你轻松的创建漂亮的.NET控制台应用程序
一个库帮你轻松的创建漂亮的.NET控制台应用程序
|
13天前
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
20天前
|
Linux API C#
.NET开源、跨平台、使用简单的面部识别库
.NET开源、跨平台、使用简单的面部识别库
|
28天前
|
JSON 开发框架 API
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
51 0
|
1月前
|
NoSQL 大数据 Redis
分享5款.NET开源免费的Redis客户端组件库
分享5款.NET开源免费的Redis客户端组件库
|
2月前
|
存储 网络协议 Go
7天玩转 Golang 标准库之 http/net
7天玩转 Golang 标准库之 http/net
37 2
|
1月前
|
SQL 开发框架 安全
【.NET Core】深入理解任务并行库 (TPL)
【.NET Core】深入理解任务并行库 (TPL)
27 0
|
2月前
|
JSON 编解码 Go
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第25天】Go语言`net/http`包提供HTTP客户端和服务器功能,简化高性能网络应用开发。本文探讨如何发起HTTP请求,常见问题及解决策略。示例展示GET和POST请求的实现。注意响应体关闭、错误处理、内容类型设置、超时管理和并发控制。最佳实践包括重用`http.Client`,使用`context.Context`,处理JSON以及记录错误日志。通过实践这些技巧,提升HTTP编程技能。
44 1