Desarrollo de Windows: QT obtiene la dirección IP de cableado y WiFi

Obtener direcciones IP cableadas e inalámbricas en la plataforma Windows es un poco más problemático que en Linux A continuación se presenta una forma de utilizar la propia interfaz de QT para lograr la adquisición de direcciones IP.

Introducción a la interfaz

Clase de interfaz de red propia de QT: QNetworkInterface, a continuación se describen los miembros y funciones de la clase

公共类型
1、接口标志
enum InterfaceFlag {
    
     IsUp, IsRunning, CanBroadcast, IsLoopBack, IsPointToPoint, CanMulticast }

详细信息如下:
QNetworkInterface::IsUp 0x1 网络接口激活
QNetworkInterface::IsRunning 0x2 网络接口已经被分配资源
QNetworkInterface::CanBroadcast 0x4 支持广播
QNetworkInterface::IsLoopBack 0x8 环回接口
QNetworkInterface::IsPointToPoint 0x10 点对点接口
QNetworkInterface::CanMulticast 0x20 支持多播

2、接口类型
enum  InterfaceType {
    
     Unknown, Loopback, Virtual, Ethernet, Wifi, Ieee1394 }

常用类型:
QNetworkInterface::Ethernet 3 有线接口类型
QNetworkInterface::Wifi 8  无线接口类型

常用公共接口
1、获取当前的flag
QNetworkInterface::InterfaceFlags flags() const

2、获取当前的MAC地址
QString hardwareAddress() const

3、获取当前的接口类型
QNetworkInterface::InterfaceType type() const

4、获取地址实体列表
QList<QNetworkAddressEntry> addressEntries() const

5、是否有效
bool isValid() const

6、获取index
int QNetworkInterface::index() const
静态成员接口
1、获取所有接口信息
QList<QNetworkInterface> allInterfaces()

2、根据索引获取接口信息
QNetworkInterface interfaceFromIndex(int index)

3、根据名称获取接口信息
QNetworkInterface interfaceFromName(const QString &name)

4、根据index获取接口名字
QString interfaceNameFromIndex(int index)

Principio de realización

Obtenga una lista de toda la información de la interfaz a través de la interfaz allInterfaces (), recorra la lista e identifique las direcciones IP wifi y eth activas de acuerdo con la bandera y el tipo.

Código de implementación

#include <Windows.h>
#include <fileapi.h>
#include <qdebug.h>
#include <QNetworkInterface>
#include <QNetworkAddressEntry>
#include <QList>

void getipaddress()
{
    
    
    QString text;
    QTextStream out(&text);
    QList<QNetworkInterface> ifaceList = QNetworkInterface::allInterfaces();

    for (int i = 0; i < ifaceList.count(); i++) {
    
    
        QNetworkInterface var = ifaceList.at(i);
        qDebug()<<var.type()<<"  ";
        qDebug()<<var.flags()<<endl;
        if (!(var.flags() & QNetworkInterface::IsUp) || !(var.flags() & QNetworkInterface::IsRunning)) {
    
    
            continue;
        }
        if (var.humanReadableName() != "Wi-Fi" && var.humanReadableName() != "Ethernet") {
    
    
            continue;
        }

        // 读取一个IP地址的关联信息列表
        QList<QNetworkAddressEntry> entryList = var.addressEntries();
        for(int j = 0; j < entryList.count(); j++) {
    
    
            QNetworkAddressEntry entry = entryList.at(j);
            qDebug()<<" IP地址:"<<entry.ip().toString()<<endl;
        }
    }
}

int main(int argc, char *argv[])
{
    
    
    getipaddress();
    int a;
    scanf("%d", &a);
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/PRML_MAN/article/details/114008820
Recomendado
Clasificación