简述

QHostInfo 类为主机名查找提供了静态函数。

QHostInfo 利用操作系统提供的查询机制来查询与特定主机名相关联的主机的 IP 地址,或者与一个IP地址相关联的主机名。这个类提供了两个静态的便利函数:一个以异步方式工作,一旦找到主机就发射一个信号;另一个以阻塞方式工作,并且最终返回一个 QHostInfo 对象。

要使用异步方式查询主机的 IP 地址,调用 lookupHost() 即可,该函数包含 3 个参数,依次是:主机名/ IP 地址、接收的对象、接收的槽函数,并返回一个查询ID。以查询ID为参数,通过调用 abortHostLookup() 函数的来中止查询。

当获得查询结果后就会调用槽函数,查询结果被存储到 QHostInfo 对象中。可通过调用 addresses() 函数来获得主机的 IP 地址列表,同时可通过调用 hostName() 函数来获得查询的主机名。

查询本机主机名

QString strLocalHostName = QHostInfo::localHostName();
qDebug() << "Local Host Name:" << strLocalHostName;

输出结果:

Local Host Name:”Wang-PC”

查询主机信息

异步方式

使用 lookupHost() ,实际的查询在一个单独的线程中完成,利用操作系统的方法来执行名称查找。

  • 根据主机名查询主机信息
int nID = QHostInfo::lookupHost("qt-project.org", this, SLOT(lookedUp(QHostInfo)));

void MainWindow::lookedUp(const QHostInfo &host)
{
if (host.error() != QHostInfo::NoError) {
qDebug() << "Lookup failed:" << host.errorString();
return;
} foreach (const QHostAddress &address, host.addresses()) {
// 输出IPV4、IPv6地址
if (address.protocol() == QAbstractSocket::IPv4Protocol)
qDebug() << "Found IPv4 address:" << address.toString();
else if (address.protocol() == QAbstractSocket::IPv6Protocol)
qDebug() << "Found IPv6 address:" << address.toString();
else
qDebug() << "Found other address:" << address.toString();
}
}

输出结果:

Found IPv4 address: “5.254.113.102”

Found IPv4 address: “178.32.152.214”

  • 根据 IP 查询主机信息
int nID = QHostInfo::lookupHost("5.254.113.102", this, SLOT(lookedUp(QHostInfo)));

void MainWindow::lookedUp(const QHostInfo &host)
{
if (host.error() != QHostInfo::NoError) {
qDebug() << "Lookup failed:" << host.errorString();
return;
} qDebug() << "Found hostName:" << host.hostName();
}

输出结果:

Found hostName: “webredirects.cloudns.net”

阻塞方式

如果要使用阻塞查找使用 QHostInfo::fromName() 函数:

QHostInfo host = QHostInfo::fromName("5.254.113.102");
if (host.error() != QHostInfo::NoError) {
qDebug() << "Lookup failed:" << host.errorString();
return;
} qDebug() << "Found hostName:" << host.hostName();

输出结果:

Found hostName: “webredirects.cloudns.net”

这种情况下,名称查询的执行与调用者处于相同的线程中。这对于非 GUI 应用程序或在一个单独的、非 GUI 线程中做名称查找是比较有用的(在 GUI 线程中调用这个函数可能会导致用户界面冻结)。

中止查询

lookupHost() 查询主机信息时,会返回一个查询 ID,以此 ID 为参数,通过调用 abortHostLookup() 来中止查询:

QHostInfo::abortHostLookup(nId);

错误处理

如果查询失败,error() 返回发生错误的类型,errorString() 返回一个能够读懂的查询错误描述。

枚举 QHostInfo::HostInfoError:

常量 描述
QHostInfo::NoError 0 查找成功
QHostInfo::HostNotFound 1 没有发现主机对应的IP地址
QHostInfo::UnknownError 2 未知错误

更多参考

Qt之QHostInfo的更多相关文章

  1. Qt之QNetworkInterface

    简述 QNetworkInterface类负责提供主机的IP地址和网络接口的列表. QNetworkInterface表示了当前程序正在运行时与主机绑定的一个网络接口.每个网络接口可能包含0个或多个I ...

  2. 《Qt 实战一二三》

    简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的 ...

  3. Qt之QNetworkInterface(查询网络接口),QHostInfo(查询主机IP)

    http://blog.csdn.net/u011012932/article/details/50775052 http://blog.csdn.net/u011012932/article/det ...

  4. Qt 多线程和网络编程学习

    一,Qt多线程类学习 QThread类,开始一个新的线程就是开始执行重新实现QThread::run(),run()是默认现实调用exec(),QThread::start()开始线程的执行,run( ...

  5. QT 网络编程一

    QT如果要进行网络编程首先需要在.pro中添加如下代码:QT += network 在头文件中包含相关头文件 #include <QHostInfo> #include <QNetw ...

  6. qt 获取当前主机的信息

    随着科技的发展,嵌入式技术在生活中越来越扮演者重要的角色,小到智能手环.手机,大到智能家居.汽车,都和嵌入式技术息息相关.在嵌入式系统中,拥有良好的用户界面会使产品更具市场优势.最近正好有机会用qt做 ...

  7. 《Linux与Qt程序设计》知识框架

    本文主要是通过一本书来大致了解Qt开发的框架,不对具体内容做详细分析. 1.首先弄清楚概念:定义->以自己的话理解是什么-> 实现的是什么功能->用在哪些地方 2.前面认识到的知识点 ...

  8. Qt之获取本机网络信息(MAC, IP等等,很全)

    经常使用命令行来查看一些计算机的配置信息. 1.首先按住键盘上的“开始键+R键”,然后在弹出的对话框中输入“CMD”,回车 另外,还可以依次点击 开始>所有程序>附件>命令提示符 2 ...

  9. 【Qt】QT5 获取IP地址

    QT获取本机IP地址 #include <QtNetwork/QHostAddress> #include <QtNetwork/QNetworkInterface> #inc ...

随机推荐

  1. Java检查型异常和非检查型异常

    1.代码 public class ExcepTest { /** * @param args */ public static void main(String[] args) { System.e ...

  2. Sqli-labs less 22

    Less-22 本关和less20.less21是一致的,我们可以从源代码中看到这里对uname进行了"uname"的处理,可以构造payload: admin1"and ...

  3. Sqli-labs less 27

    Less-27 本关主要考察将union,select和26关过滤掉的字符.此处我们依旧和26关的方式是一样的,只需要将union和select改为大小写混合就可以突破. 示例:127.0.0.1/s ...

  4. PHP PDO_MYSQL 操作类 YAF嵌入高性能类而准备

    https://github.com/indieteq/PHP-MySQL-PDO-Database-Class PHP-PDO-MySQL-Class A PHP MySQL PDO class s ...

  5. 7 天玩转 ASP.NET MVC - 第 1 天

    0. 前言 正如标题「7 天玩儿转 ASP.NET MVC」所言,这是个系列文章,所以将会向大家陆续推出 7 篇.设想一下,一天一篇,你将从一个愉快的周一开始阅读,然后在周末成为一个 ASP.NET ...

  6. POJ 3685

    Matrix Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 4428   Accepted: 1102 Descriptio ...

  7. iOS多线程的初步研究(十)-- dispatch同步

    GCD提供两种方式支持dispatch队列同步,即dispatch组和信号量. 一.dispatch组(dispatch group) 1. 创建dispatch组 dispatch_group_t ...

  8. Python 爬虫过程中的中文乱码问题

    python+mongodb 在爬虫的过程中,抓到一个中文字段,encode和decode都无法正确显示 注:以下print均是在mongodb中截图显示的,在pythonshell中可能会有所不同 ...

  9. (10)nehe教程4--旋转

    旋转: 在这一课里,我将教会你如何旋转三角形和四边形.左图中的三角形沿Y轴旋转,四边形沿着X轴旋转. 上一课中我教给您三角形和四边形的着色.这一课我将教您如何将这些彩色对象绕着坐标轴旋转.其实只需在上 ...

  10. CSS3实现页面的平滑过渡

    这是文件的css,全部文件的话请到Github下载:点击这里 @charset "UTF-8"; @font-face {font-family: 'iconfont'; src: ...