Qt获取本机网络信息

        在网络应用中,经常需要获得本机的主机名、IP地址和硬件地址等网络信息。运用QHostInfo、QNetworkInterface、QNetworkAddressEntry可获得本机的网络信息。

具体实现步骤如下:

  1. 工程文件
    QT += network
  2. 头文件
    #include <QWidget>
    #include <QString>
    #include <QLabel>
    #include <QGridLayout>
    #include <QMessageBox>
    #include <QLineEdit>
    #include <QPushButton>
    #include <QHostInfo>
    #include <QNetworkInterface>
    
    class NetworkInformation : public QWidget
    {
        Q_OBJECT
    
    public:
        NetworkInformation(QWidget *parent = 0);
        void getHostInformation();
        ~NetworkInformation();
    
    public slots:
        void slotDetail();
    
    private:
        QLabel *hostLabel;
        QLineEdit *LineEditLocalhostName;
        QLabel *ipLabel;
        QLineEdit *LineEditAddress;
        QPushButton *detailBtn;
        QGridLayout *mainLayout;
    };
    
  3. 源文件
    #include "networkinformation.h"
    
    NetworkInformation::NetworkInformation(QWidget *parent)
        : QWidget(parent)
    {
        hostLabel = new QLabel(tr("主机名:"));
        LineEditLocalhostName = new QLineEdit;
        ipLabel = new QLabel(tr("IP地址:"));
        LineEditAddress = new QLineEdit;
        detailBtn = new QPushButton(tr("详细"));
    
        mainLayout = new QGridLayout(this);
        mainLayout->addWidget(hostLabel,0,0);
        mainLayout->addWidget(LineEditLocalhostName,0,1);
        mainLayout->addWidget(ipLabel,1,0);
        mainLayout->addWidget(LineEditAddress,1,1);
        mainLayout->addWidget(detailBtn,2,0,1,2);
    
        getHostInformation();
        connect(detailBtn,SIGNAL(clicked(bool)),this,SLOT(slotDetail()));
    }
    
    NetworkInformation::~NetworkInformation()
    {
    }
    
    void NetworkInformation::getHostInformation()
    {
        QString localHostName = QHostInfo::localHostName();
        LineEditLocalhostName->setText(localHostName);
    
        QHostInfo hostInfo = QHostInfo::fromName(localHostName);
        QList<QHostAddress> listAddress =hostInfo.addresses();
        if(!listAddress.isEmpty())
        {
            LineEditAddress->setText(listAddress.first().toString());
        }
    }
    
    void NetworkInformation::slotDetail()
    {
        QString detail = "";
        QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
        for(int i=0;i<list.count();i++)
        {
            QNetworkInterface interface = list.at(i);
            detail = detail + tr("设备:")+interface.name()+"\n";
            detail = detail + tr("硬件地址:")+interface.hardwareAddress()+"\n";
            QList<QNetworkAddressEntry> entryList = interface.addressEntries();
            for(int j=0;j<entryList.count();j++)
            {
                QNetworkAddressEntry entry = entryList.at(j);
                detail = detail +"\t" + tr("IP地址:")+entry.ip().toString()+"\n";
                detail = detail +"\t" + tr("子网掩码:")+entry.netmask().toString()+"\n";
                detail = detail +"\t" + tr("广播地址:")+entry.broadcast().toString()+"\n";
            }
        }
        QMessageBox::information(this,tr("Detail"),detail);
    }

        其中:

  • QString localHostName = QHostInfo::localHostName():获得本机主机名。QHostInfo提供了一系列有关网络信息的静态函数,可以根据主机名获得分配的IP地址,也可以根据IP地址获得相应的主机名。
  • QHostInfo hostInfo = QHostInfo::fromName(localHostName):根据主机名获得相关主机信息,包括IP地址等。QHostInfo::fromName()函数通过主机名查找IP地址信息。
  • QList<QHostAddress> listAddress = hostInfo.addresses():获得主机的IP地址列表。
  • if(!listAddress.isEmpty()){……}:获得的主机IP地址列表可能为空。在不为空的情况下使用第一个P地址。
  • QList<QNetworkInterface> list=QNetworkInterface::allInterfaces(): QNetworkInterface 类提供了一个主机IP地址和网络接口的列表。
  • interface.name():获得网络接口的名称。
  • interface.hardwareAddress():获得网络接口的硬件地址。
  • interface.addressEntries():每个网络接口包括0个或多个IP地址,每个IP地址有选择性地与一个子网掩码和(或)一个广播地址相关联。QNetworkAddressEntry类存储了被网络接口支持的一个IP地址,同时还包括与之相关的子网掩码和广播地址。
     

        运行结果:

                

                 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值