Qt之QHostInfo获取主机信息

简述

Qt中提供了几个用于获取主机网络信息的类,包括:QHostInfo、QHostAddress、QNetworkInterface以及QNetworkAddress。

QHostInfo类提供了一系列用于主机名查询的静态函数。

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

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

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

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

  • 简述
  • 获取本机主机名
  • 异步方式
    • 获取IP
    • 获取主机名
  • 阻塞方式
  • 错误处理

获取本机主机名

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

输出结果:
Local Host Name:”Wang-PC”

异步方式

获取IP

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”

获取主机名

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 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”

错误处理

如上所述,查询失败,可以通过error()返回的错误类型HostInfoError来判断,其包含三个值:

常量 描述
QHostInfo::NoError 0 查找成功
QHostInfo::HostNotFound 1 没有发现主机对应的IP地址
QHostInfo::UnknownError 2 未知错误
时间: 2024-11-05 18:34:46

Qt之QHostInfo获取主机信息的相关文章

Qt之QNetworkInterface获取主机信息

简述 QNetworkInterface类负责提供主机的IP地址和网络接口的列表. QNetworkInterface表示了当前程序正在运行时与主机绑定的一个网络接口.每个网络接口可能包含0个或多个IP地址,每个IP地址都可选择性地与一个子网掩码和/或一个广播地址相关联.这样的列表可以通过addressEntries()方法获得.当子网掩码或者广播地址不必要时,可以使用allAddresses()便捷函数来仅仅获得IP地址. QNetworkInterface使用hardwareAddress(

QT遍历目录获取文件信息

QFileInfo 获取文件信息:文件名称,路径,大小,创建时间,修改时间,权限等 使用 路径: UNIX: /home/dipper/file1 Windows: C://dipper//file1 构造函数: QFileInfo fileInfo(path); QFileInfo fileInfo; fileInfo.setFile(path); exists(): 判断文件是否存在 size(): 获取文件大小 文件类型: isFile(), isDir(), isSymLink() sy

【C/C++学院】(18)QT文件读写/主窗口类/获取host信息

1.文件读写 QT提供了QFile类用于文件读写. QFile可以读写文本文件,也可以读写二进制文件 #include <QFile> #include <QTextStream> 读文本文件例子 QString s; QFile file("abc.txt); if (file.open(QFile::ReadOnly)) { QTextStream stream(&file); while (!stream.atEnd()) { s = stream.read

端口-如何获取主机中所有进程的udp连接的具体信息(远程IP:Port 收发字节数)

问题描述 如何获取主机中所有进程的udp连接的具体信息(远程IP:Port 收发字节数) 20C 我知道getudptable这个api能获取到一些udp的信息,但是只能获取本地的IP:Port,没法获取远程的,以及收发字节(流量),大神帮我!感激不尽!类似IPRadar(IP雷达)软件的这种功能! 解决方案 参考:http://bbs.csdn.net/topics/390953375 解决方案二: windump可以实现你的需求,开源的.地址:http://www.winpcap.org/w

asp.net获取客户端浏览器及主机信息

原文:asp.net获取客户端浏览器及主机信息 在线预览效果:http://tool.hovertree.com/info/client/ 其中aspx页面的控件代码: <asp:ListBox runat="server" ID="lbHoverTreeInfo" ClientIDMode="Static"> </asp:ListBox> 以下是实现代码: 1 using System; 2 using System.W

c++-Qt获取文件信息后崩溃结束,内附错误,求解决方案

问题描述 Qt获取文件信息后崩溃结束,内附错误,求解决方案 是自己做的媒体播放器,添加文件点确定后就会崩溃,调试的时候给出的这个框,求解 解决方案 段错误,你的代码中没有正确处理好指针,估计有访问空指针等问题 解决方案二: 查看是不是有指针的非法使用,一般这个错误很多都是指针非法使用导致.

5 个获取 Linux 主机信息的命令

Linux 系统管理员在接手一台新的服务器的时候,如果没有好的交接文档,我们可以得到的主机信息就要靠我们自己了.很多信息是可以直接通过命令从主机上获得的,下面就和大家分享 5 个获取 Linux 主机信息的命令.(注:我使用的是 Ubuntu 13.04) 1. 查看或改变 Linux 主机名的命令 $ hostname mylinuxbook-Inspiron-1525 从命令结果上您可以看到我的 Ubuntu 主机名是 mylinuxbook-Inspiron-1525.您可能会注意到,主机

Qt之QHostInfo

简述 QHostInfo 类为主机名查找提供了静态函数. QHostInfo 利用操作系统提供的查询机制来查询与特定主机名相关联的主机的 IP 地址,或者与一个IP地址相关联的主机名.这个类提供了两个静态的便利函数:一个以异步方式工作,一旦找到主机就发射一个信号:另一个以阻塞方式工作,并且最终返回一个 QHostInfo 对象. 要使用异步方式查询主机的 IP 地址,调用 lookupHost() 即可,该函数包含 3 个参数,依次是:主机名/ IP 地址.接收的对象.接收的槽函数,并返回一个查

Linux中如何获取CPU信息

我们可以在 /proc/cpuinfo 中获取需要信息 1.当前 CPU 的型号 [root@ localhost  ~]# cat /proc/cpuinfo |grep "model name" |uniq model name      : AMD Opteron(tm) Processor 6140 2.当前 CPU 运行模式 [root@localhost tmp]# getconf LONG_BIT 32 说明当前 CPU 运行在32位环境下 3.当前 CPU 是否支持 6