Qt网络编程之获取网络信息

在网络编程中经常需要获取本地或远程主机的网络信息,如IP地址、子网掩码、广播地址等,Qt network模块中提供了一些方便的类,如QHostInfo、QNetworkInterface等。

本文将从三种情况介绍Qt网络编程中如何获取主机网络信息。


1.获取本机主机名和IP地址(利用QHostInfo类)

QHostInfo可以调用QHostInfo::localHostName()来获取本机主机名,并根据主机名来获取IP地址等信息,其中,所有的ip地址存放在QHostInfo::addresses()中。另外,根据address.protocol()可以筛选IPv4和IPv6地址。

示例:

    QString localHostName=QHostInfo::localHostName();
    qDebug()<<"Local host name:"<


2.通过域名查找对应IP地址(利用QHostInfo类)

QHostInfo提供了一个强有力的查找成员lookupHost(),该函数基于信号与槽机制。

因此我们可以先定义一个继承自QObject的专用查找类,然后定义槽函数处理查找结果。


示例:

查找类LookupIp定义如下:

class LookupIp : public QObject
{
    Q_OBJECT
public:
    explicit LookupIp(QObject *parent=0);
    void startLookup(const QString &str);
    QString getHostName(void);
    void setHostName(const QString &name);

signals:

public slots:
    void lookedup(const QHostInfo &host);

private:
    QString hostName;
};
成员函数实现:

LookupIp::LookupIp(QObject *parent)
{
    qDebug()<<"start lookup IP...";
}

void LookupIp::startLookup(const QString &hostName)
{
    QHostInfo::lookupHost(hostName,this,SLOT(lookedup(QHostInfo)));
}

void LookupIp::setHostName(const QString &name)
{
    hostName=name;
}

QString LookupIp::getHostName()
{
    return hostName;
}


void LookupIp::lookedup(const QHostInfo &host)
{
    qDebug()<<"IP address of"<

3.获取本机完整的网络接口信息(利用QNetworkInterface类)

若想获取比较完整的网络信息,包括网卡等硬件信息,可以利用QNetworkInterface类,该类存储所有网络设备的设备名、Mac地址、IP地址、子网掩码、广播地址等。


示例:

 QList list=QNetworkInterface::allInterfaces();//获取所有网络接口信息
    foreach(QNetworkInterface interface,list)
    {
        //遍历每一个接口信息
        qDebug()<<"Device:"<entryList=interface.addressEntries();//获取ip地址和子网掩码和广播地址
        foreach(QNetworkAddressEntry entry,entryList)
        {//遍历ip条目列表
            qDebug()<<"IP address:"<

关于Qt获取网络信息还有一些其他方法,本文给出的方法应该是比较方便快捷的,其他方法大家可以查看Qt帮助文档。

你可能感兴趣的:(Qt)