Qt网络编程1-获取主机信息

Qt网络编程1-获取主机信息

1 概述:
在网络编程中,通常需要获取主机名,IP地址,MAC地址.其中相关的类有QHostInfo,QNetworkInterface, QNetworAddressEntry.
2 相关的类和方法:

2.1 QHostInfo
简述:这个类提供了查找ip地址和主机名的相关方法
几个常用的静态成员函数
1)localHostName()

//获取这台机器的主机名称
QString QHostInfo::localHostName()

2)fromName()

//根据主机名称查询Ip地址 在查询期间,该函数阻塞,直到准备好查询结果.将查询结果放在一个QHost对象中
QHostInfo QHostInfo::fromName(const QString &name)

3)addresses()

//返回主机的Ip地址,返回值可能为空
QList<QHostAddress> QHostInfo::addresses() const

4)hostName()

//返回IP地址被查询的主机名称
QString QHostInfo::hostName() const

2.2 QNetworkInterface
提供了IP地址和网络接口的列表.每个网络接口都有0个或多个IP,这个IP地址随意的关联一个子网掩码和广播地址
2.2.1 相关的成员函数

1)allInterfaces()

//返回这台主机上的所有的网络接口
[static]QList<QNetworkInterface> QNetworkInterface::allInterfaces()

2)allAddresses()

//返回这台主机上的所有ip地址
[static] QList<QHostAddress> QNetworkInterface::allAddresses()
//返回ip地址的列表
QList<QNetworkAddressEntry> QNetworkInterface::addressEntries() const

3)broadcast()

//返回广播地址 IPv4地址 和子网掩码
QHostAddress QNetworkAddressEntry::broadcast() const

4)ip()

//返回IPV4或IPv6地址
QHostAddress QNetworkAddressEntry::ip() const

5)netmask()

//返回和IP地址关联的子网掩码
QHostAddress QNetworkAddressEntry::netmask() const

说明:要使用这些类,需要在.pro文件中加入

QT+= network

3 相关Demo

#include <QCoreApplication>
#include <QHostInfo>
#include <QList>
#include <QNetworkInterface>
#include <iostream>
using namespace  std;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString localHostName = QHostInfo::localHostName();
    QHostInfo info = QHostInfo::fromName(localHostName);
    QList<QHostAddress> addressList;
    addressList = info.addresses();
    cout << info.hostName().toStdString() << endl;
    if(!addressList.isEmpty()){
        for(auto it = addressList.begin();it!=addressList.end();it++){
                 string str = (*it).toString().toStdString();
                 cout << str << endl;
        }

    }
    QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
    for(auto it = list.begin();it!=list.end();it++){
        string deviceName = it->name().toStdString();
        cout << "设备名称" << deviceName << endl;
        string hardWareAddress =  it->hardwareAddress().toStdString();
        cout << "硬件地址" << hardWareAddress << endl;
        QNetworkInterface interface = *it;
        QList<QNetworkAddressEntry> entrylist = interface. addressEntries();
         for(auto it1 = entrylist.begin();it1 != entrylist.end();it1++){
             cout << "Ip地址:" << endl << it1->ip().toString().toStdString() << endl;
             cout << "子网掩码:" << endl << it1->netmask().toString().toStdString() << endl;
             cout << "广播地址" << endl <<  it1->broadcast().toString().toStdString() << endl;
         }
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值