首先通过获取本地的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->pushButton, SIGNAL(clicked(bool)), this, SLOT(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(useRow, Col1, ipItem);
ui->tableWidget->setItem(useRow, Col2, hostItem);
useRow++;
}
QString Find_Device::getLockIp()
{
QString hostname = QHostInfo::localHostName();
QHostInfo hostinfo = QHostInfo::fromName(hostname);
localip = "";
QList<QHostAddress> addlist = 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 < 256; i++){
// QHostInfo::lookupHost(QString("192.0.0.%1").arg(i), this, SLOT(lookUp(QHostInfo)));
QHostInfo::lookupHost(ip+QString("%1").arg(i), this, SLOT(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