Qt - 网络相关的类

1. QHostInfo

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

QHostInfo查找与主机名关联的IP地址或与IP地址关联的主机名。 这个类提供了两个方便的静态函数:一个异步工作并在找到主机时发出信号,另一个阻塞并返回QHostInfo对象。

异步查找主机的IP地址,调用lookupHost(),它接受主机名或IP地址、接收方对象和槽签名作为参数并返回ID。 您可以通过使用查找ID调用abortHostLookup()来中止查找。

 
 
//通过域名查找ip
QHostInfo::lookupHost("www.baidu.com",this,[](const QHostInfo& info)
{
    qDebug()<<info.hostName()<<info.addresses();
});
//查找ip是否存在
QHostInfo::lookupHost("183.232.231.172",this,[](const QHostInfo& info)
{
    qDebug()<<info.hostName()<<info.addresses();
});

当结果准备好时,将调用该槽。 结果存储在QHostInfo对象中。 调用addresses()获取主机的IP地址列表,调用hostName()获取所查找的主机名。

如果查找失败,error()将返回所发生的错误类型。 errorString()给出了可读的查找错误描述。

如果你想要一个阻塞查找,使用QHostInfo::fromName()函数:

 
 
QHostInfo info = QHostInfo::fromName("smtp.qq.com");
qDebug()<<info.hostName()<<info.addresses();

QHostInfo通过IDNA和Punycode标准支持国际化域名(IDNs)。

要检索本地主机的名称,请使用静态QHostInfo::localHostName()函数。

 
 
qDebug()<< QHostInfo::localHostName();

 

2. QHostAddress

QHostAddress类提供一个IP地址。

这个类以独立于平台和协议的方式保存IPv4或IPv6地址。

QHostAddress通常与QTcpSocket、QTcpServer和QUdpSocket一起使用,以连接到主机或建立服务器。

主机地址用setAddress()设置,用toIPv4Address()、toIPv6Address()或toString()检索。 可以使用protocol()检查类型。

注意:请注意QHostAddress不做DNS查找。 QHostInfo是需要的。

这个类还支持常见的预定义地址:Null、LocalHost、LocalHostIPv6、Broadcast和Any。

枚举 描述
QHostAddress::Null 空地址对象。 相当于QHostAddress()。 参见QHostAddress: isNull()。
QHostAddress::LocalHost IPv4本地主机地址。 相当于QHostAddress(127.0.0.1)。
QHostAddress::localhsotIPv6 IPv6本地主机地址。 相当于QHostAddress(“::1”)。
QHostAddress::Broadcast IPv4广播地址。 相当于QHostAddress(“255.255.255.255”)
QHostAddress::AnyIPv4 IPv4任何地址。 相当于QHostAddress(“0.0.0.0”)。 与此地址绑定的套接字只在IPv4接口上监听。
QHostAddress::AnyIPv6 IPv6任何地址。 相当于QHostAddress(“::”)。 与此地址绑定的套接字只在IPv6接口上监听。
QHostAddress::Any 双栈任意地址。 与此地址绑定的套接字将侦听IPv4和IPv6接口。

 

3. QNetworkInterface

QNetworkInterface类提供了主机的IP地址和网络接口的列表。

QNetworkInterface表示一个连接到正在运行程序的主机的网络接口。 每个网络接口可以包含0个或多个IP地址,每个IP地址可选地与一个网络掩码和/或一个广播地址相关联。 这类三元组的列表可以通过addressEntries()获得。 或者,当网络掩码或广播地址或其他信息不需要时,使用方便的allAddresses()函数只获取活动接口的IP地址。

QNetworkInterface还使用hardwareAddress()报告接口的硬件地址。

并非所有操作系统都支持报告所有特性。 在所有平台中,只有IPv4地址保证被这个类列出。 其中IPv6地址列表仅支持在Windows、Linux、macOS和bsd等操作系统上使用。

  • 这个方便的函数返回主机上找到的所有IP地址。

 
 
QList<QHostAddress> addrlist = QNetworkInterface::allAddresses();
for(QHostAddress addr : addrlist)                                  
{                                                                  
    qDebug()<<addr.protocol()<<addr.toString();                    
}
  • 返回主机上找到的所有网络接口的列表。 如果失败,它将返回一个没有元素的列表。

 
 
QList<QNetworkInterface> networkList =  QNetworkInterface::allInterfaces();
for(auto inter : networkList)
{
    if(!inter.isValid())
        continue;
    //输出此网络接口的名称、接口的类型、MAC地址和 在Windows上返回这个网络接口的人类可读的名称(如以太网、本地连接等)
    qDebug()<<inter.name()<<inter.type()<<inter.hardwareAddress()<<inter.humanReadableName();
    //输出网络接口对应的ip地址
    for(auto entrys : inter.addressEntries())
    {
        qDebug()<<entrys.ip();
    }
}

 

4. QNetworkAddressEntry

QNetworkAddressEntry类存储一个由网络接口支持的IP地址,以及它相关的网络掩码和广播地址。

//返回IPv4地址和子掩码相关联的广播地址
QHostAddress broadcast() const
//返回网络接口中的IPv4或IPv6地址
QHostAddress ip() const
//返回与IP地址相关联的子网掩码
QHostAddress netmask() const
posted @   [BORUTO]  阅读(260)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示