1.QNetworkInterface简介
QNetworkInterface可以获得应用程序所在主机的所有网络接口,包括子网掩码和广播地址等。
主要静态方法
- QList<QHostAddress> allAddresses():返回主机上所有Ip地址的列表。
- QList<QNetworkInterface> allInterfaces():返回主机上所有接口的网络列表。
成员方法
- QString hardwareAddress():返回该接口的低级硬件地址,以太网里就是MAC地址。
- QString humanReadableName():返回可以读懂的接口名称,如果名称不确定,得到的就是name函数的返回值。
- QString name():返回网络接口名称。
- bool isValid():如果接口信息有效就返回true。
2.示例
返回主机上所有网络接口,包括子网掩码和广播地址,主机的ip地址了列表
//.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QNetworkInterface>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
QString protocolName(QAbstractSocket::NetworkLayerProtocol protocol);
private slots:
void on_btnAddr_clicked();
void on_btnInterFace_clicked();
void on_btnClear_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
//.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
QString Widget::protocolName(QAbstractSocket::NetworkLayerProtocol protocol)
{
switch (protocol)
{
case QAbstractSocket::IPv4Protocol:
return "IPv4 Protocol";
case QAbstractSocket::IPv6Protocol:
return "IPv6 Protocol";
case QAbstractSocket::AnyIPProtocol:
return "Any IP Protocol";
default:
return "Unknown Network Layer Protocol";
}
}
void Widget::on_btnAddr_clicked()
{
QList<QHostAddress> addList = QNetworkInterface::allAddresses();
for(int i=0;i<addList.count();i++)
{
QHostAddress host = addList.at(i);
ui->plainTextEdit->appendPlainText("协议: "+ protocolName(host.protocol()));
ui->plainTextEdit->appendPlainText("IP地址: "+ host.toString());
ui->plainTextEdit->appendPlainText("");
}
}
void Widget::on_btnInterFace_clicked()
{
QList<QNetworkInterface> ifList = QNetworkInterface::allInterfaces();
for(int i=0;i<ifList.count();i++)
{
QNetworkInterface inf = ifList.at(i);
if(!inf.isValid())
continue;
ui->plainTextEdit->appendPlainText("设备名称: "+inf.humanReadableName());
ui->plainTextEdit->appendPlainText("硬件地址: "+inf.hardwareAddress());
QList<QNetworkAddressEntry> entryList = inf.addressEntries();
for(int j=0;j<entryList.count();j++)
{
QNetworkAddressEntry entry = entryList.at(j);
ui->plainTextEdit->appendPlainText("IP地址: "+entry.ip().toString());
ui->plainTextEdit->appendPlainText("子网掩码: "+entry.netmask().toString());
ui->plainTextEdit->appendPlainText("广播地址: "+entry.broadcast().toString() + "\n");
}
ui->plainTextEdit->appendPlainText("\n");
}
}
void Widget::on_btnClear_clicked()
{
ui->plainTextEdit->clear();
}