QtCreator 网络编程——获取网络接口信息(QHostInfo,QNetworkInterface ,QNetworkAddressEntry)

来源:互联网 发布:淘宝卫衣店铺推荐 编辑:程序博客网 时间:2024/06/14 16:05

1. 将主机名解析为IP地址

QHostInfo 用于主机名的查找,它提供了两个便捷的静态函数

fromName():会阻塞并返回一个QHostInfo对象

QHostInfo info = QHostInfo::fromName("www.baidu.com");
qDebug() << "Ip:"  << info.addresses();
QHostAddress address;
//输出找到的IP地址
foreach (address, info.addresses()) {
            qDebug() << address;
    if (address.protocol() == QAbstractSocket::IPv4Protocol)
        qDebug() << address.toString();
}
loopupHost():异步进行,每当找到一个主机时,都会发射信号

它需要制定一个主机名,一个QObject指针和一个槽。可以执行名称查找,当完成后悔调用制定的QObject对象的槽,查找工作是在其他线程完成的。是异步的。

头文件中声明私有槽

private slots:
        void lookedUp(const QHostInfo &host);


QHostInfo::lookupHost("www.baidu.com",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()) {
        qDebug() << " found address:" << address.toString() << host.hostName();
    }
}

2. 获取接口列表

QNetworkInterface 类来获取主机的IP地址列表和网络接口信息

    //获取所有网络接口的列表
    QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();

    foreach(QNetworkInterface interface, list) {
        //接口名称
        qDebug() << "Name:" << interface.name();
        //硬件地址
        qDebug() << "hardwareAddress:" << interface.hardwareAddress();
        //获取IP地址条目列表,每个条目包含一个IP地址,一个子网掩码和广播地址
        QList<QNetworkAddressEntry> entryList = interface.addressEntries();
        //遍历每一个IP地址条目
        foreach (QNetworkAddressEntry entry, entryList) {
            //IP地址
            qDebug() << "IP address:" << entry.ip().toString();
            qDebug() << "netmask:" << entry.netmask().toString();
            qDebug() << "Broadcast:" << entry.broadcast().toString();
        }
    }




0 0
原创粉丝点击