Qt 实例20 查看主机IP信息

1.QHostInfo

主要用来查询主机信息,包括主机名,ip地址,DNS域名等信息。

以下常用静态方法

  • QHostInfo::localHostName():获取本机的主机名。

  • QHostInfo::fromName(QString &name):通过主机名获取IP地址。

  • QHostInfo::lookupHost():可以通过一个主机名,以异步方式查找这个主机的IP地址。

  • QHostInfo::localDomainName():返回本机DNS域名。

以下常用方法

  • QString hostName():返回通过IP查找的主机的名称。

  • int lookupId():返回本次查找的ID

  • QString errorString():返回主机查找失败,返回错误描述的字符串。

2.示例

获取本机的主机信息和获取百度域名信息

3b0460fe815563e6903a77153044de77.gif

详细代码如下:

//.h
#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
#include <QHostInfo>
 
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_btnGetHostInfo_clicked();
 
    void on_btnGetIp_clicked();
 
    void on_btnClear_clicked();
 
    void on_lookUpHostInfo(const QHostInfo&);
 
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_btnGetHostInfo_clicked()
{
    //本地主机名
    QString hostName = QHostInfo::localHostName();
    ui->plainTextEdit->appendPlainText("本地主机名: "+ hostName + "\n");
 
    //本机IP地址
    QHostInfo hostInfo = QHostInfo::fromName(hostName);
 
    //IP地址列表
    QList<QHostAddress> addrList = hostInfo.addresses();
    for(int i=0;i<addrList.count();i++)
    {
        QHostAddress host = addrList.at(i);
 
        bool isShow = ui->checkBox->isChecked();
        if(isShow)
            isShow = (QAbstractSocket::IPv4Protocol == host.protocol()); //IPv4协议
        else
            isShow = true;
        if(isShow)
        {
            ui->plainTextEdit->appendPlainText("协议: "+protocolName(host.protocol()));
            ui->plainTextEdit->appendPlainText("本机IP地址: "+host.toString());
            ui->plainTextEdit->appendPlainText("");
        }
    }
}
 
void Widget::on_btnGetIp_clicked()
{
    //主机名
    QString hostName = ui->lineEdit->text();
 
    ui->plainTextEdit->appendPlainText("正在查询主机信息: "+ hostName);
    QHostInfo::lookupHost(hostName,this,SLOT(on_lookUpHostInfo(QHostInfo)));
}
 
void Widget::on_btnClear_clicked()
{
    ui->plainTextEdit->clear();
}
 
void Widget::on_lookUpHostInfo(const QHostInfo &host)
{
    //IP地址列表
    QList<QHostAddress> addrList = host.addresses();
    for(int i=0;i<addrList.count();i++)
    {
        QHostAddress host = addrList.at(i);
 
        bool isShow = ui->checkBox->isChecked();
        if(isShow)
            isShow = (QAbstractSocket::IPv4Protocol == host.protocol()); //IPv4协议
        else
            isShow = true;
        if(isShow)
        {
            ui->plainTextEdit->appendPlainText("协议: "+protocolName(host.protocol()));
            ui->plainTextEdit->appendPlainText("本机IP地址: "+host.toString());
            ui->plainTextEdit->appendPlainText("");
        }
    }
}

原文链接:https://blog.youkuaiyun.com/wzz953200463/article/details/114951013

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值