Qt 寻找局域网中当前网段内在线设备

首先通过获取本地的IP地址,然后再去寻找同网段内其他在线设备,话不多说,直接上代码:

.CPP

#include "find_device.h"

#include "ui_find_device.h"

#include <QHostAddress>

#include <QHostInfo>

#include <QDebug>

#define Col1 0

#define Col2 1

Find_Device::Find_Device(QWidget *parent) :

    QWidget(parent),

    ui(new Ui::Find_Device)

{

    ui->setupUi(this);

    ui->tableWidget->horizontalHeader()->setStretchLastSection(true);

    ui->tableWidget->setRowCount(255);

    connect(ui->pushButtonSIGNAL(clicked(bool)), thisSLOT(btnClicked()));

}

Find_Device::~Find_Device()

{

    delete ui;

}

int useRow = 0;

void Find_Device::lookUp(const QHostInfo &host)

{

    if(host.error() != QHostInfo::NoError){

        qDebug() << "Lookup failed:" << host.errorString();

        return;

    }

    if(host.addresses()[0].toString() == host.hostName())

        return;

    QTableWidgetItem *ipItem = new QTableWidgetItem;

    ipItem->setText(host.addresses()[0].toString());

    QTableWidgetItem *hostItem = new QTableWidgetItem;

    hostItem->setText(host.hostName());

    if(ipItem->text() != hostItem->text()){

        ipItem->setTextColor(QColor(Qt::black));

        hostItem->setTextColor(QColor(Qt::black));

    }

    ui->tableWidget->setItem(useRowCol1ipItem);

    ui->tableWidget->setItem(useRowCol2hostItem);

    useRow++;

}

QString Find_Device::getLockIp()

{

    QString hostname = QHostInfo::localHostName();

    QHostInfo hostinfo = QHostInfo::fromName(hostname);

    localip = "";

    QList<QHostAddressaddlist = hostinfo.addresses();

    qDebug() << addlist;

    if(!addlist.isEmpty())

    {

        for(int i = 0;i<addlist.size();i++){

            QHostAddress aHost = addlist.at(i);

            qDebug() << aHost;

            if(QAbstractSocket::IPv4Protocol == aHost.protocol())

            {

                localip = aHost.toString();

                break;

            }

        }

        return localip;

    }

}

void Find_Device::btnClicked()

{

    getLockIp();

    QString ip = localip.mid(0,8);

    for(int i = 1 ; i < 256i++){

//        QHostInfo::lookupHost(QString("192.0.0.%1").arg(i), this, SLOT(lookUp(QHostInfo)));

        QHostInfo::lookupHost(ip+QString("%1").arg(i), thisSLOT(lookUp(QHostInfo)));

    }

}

.H文件

#ifndef FIND_DEVICE_H

#define FIND_DEVICE_H

#include <QWidget>

QT_BEGIN_NAMESPACE

class QHostInfo;

QT_END_NAMESPACE

namespace Ui {

class Find_Device;

}

class Find_Device : public QWidget

{

    Q_OBJECT

public:

    explicit Find_Device(QWidget *parent = nullptr);

    ~Find_Device();

protected slots:

    void lookUp(const QHostInfo &host);

    void btnClicked();

    QString getLockIp();

private:

    Ui::Find_Device *ui;

    QString localip;

};

#endif // FIND_DEVICE_H

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值