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
标签:Qt,QHostInfo,网络,地址,QHostAddress,IP地址,相关,网络接口,IPv4
From: https://www.cnblogs.com/zhuchunlin/p/18321108