在 QNetworkAccessManager 中,何时从解析 DNS 的 IP 列表中选择 IP?

Posted

技术标签:

【中文标题】在 QNetworkAccessManager 中,何时从解析 DNS 的 IP 列表中选择 IP?【英文标题】:In QNetworkAccessManager, When IP is selected from list of IPs resolved DNS? 【发布时间】:2015-04-27 09:41:26 【问题描述】:

我正在使用 QnetworkAccessManager 发出 HTTP 请求,我想知道 FQDN 何时被解析(DNS 解析)以获取 IP 地址或 IP 地址列表。

QNetworkAccessManager如何从解析的IP列表中选择IP发送请求?

QNetworkAccessManager 是否保留 DNS 解析的缓存?

【问题讨论】:

【参考方案1】:

QNetworkAccessManager 使用QAbstractSocket,包括它解析主机名的能力。 QAbstractSocket 使用QHostInfo::lookupHost 获取指定主机的IP 列表(QHostInfo::​addresses)。 QAbstractSocket 尝试连接到每个 QHostInfo::​addresses,直到连接成功。

无法知道使用了哪个地址,因为QNetworkAccessManager 不会向用户公开使用过的套接字。您可以使用QHostInfo public API 获取完整的地址列表。

QHostInfo 具有内部全局缓存,最多可存储 128 个项目,最长期限为 1 分钟。

【讨论】:

感谢您提供信息。如果 ant URL 被触发,它是否只使用 TCP 或 UDP 协议?因为我想使用 QtWebkit 触发 URL 并检查哪个 IP 地址请求。 HTTP(S) 和 FTP 仅使用 TCP。

以上是关于在 QNetworkAccessManager 中,何时从解析 DNS 的 IP 列表中选择 IP?的主要内容,如果未能解决你的问题,请参考以下文章

在 QNetworkAccessManager 中,何时从解析 DNS 的 IP 列表中选择 IP?

在 Qt 中使用 QNetworkAccessManager 的持久连接

使用 QNetworkAccessManager 请求

QNetworkAccessManager 读取传出数据并将其保存在 QIODevice

在 QtWebkit 中,如何调用网页的 QNetworkAccessManager::createRequest()?

在多个线程中使用QNetworkAccessManager