前言:
转载请附上连接,本帖原创请勿照抄。
环境QT5,实现了获取本地计算机名、IPV4/6地址、获取了公网地址
1、.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QHostInfo>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
void lookedUp(const QHostInfo &host);
QString returnOutIP();
QString GetHtml(QString url);
QString GetNetIP(QString webCode);
};
#endif // MAINWINDOW_H
2、获取计算机名
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtNetwork>
/*外网ip*/
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QEventLoop>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//计算机名字
QString localHostName = QHostInfo::localHostName();
qDebug() <<"localHostName: "<<localHostName;
}
MainWindow::~MainWindow()
{
delete ui;
}
运行输出的信息:localHostName: "DESKTOP-UMXXXXX"
3、IPv4、IPV6 地址
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtNetwork>
/*外网ip*/
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QEventLoop>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//计算机名字
QString localHostName = QHostInfo::localHostName();
//qDebug() <<"localHostName: "<<localHostName;
//IPv6 地址
QHostInfo info = QHostInfo::fromName(localHostName);
qDebug() <<"IP Address: "<<info.addresses();
//IPV4 地址
QHostAddress address;
info.addresses();
if(address.protocol() == QAbstractSocket::IPv4Protocol)
qDebug() << address.toString();
if(address.protocol() == QAbstractSocket::IPv6Protocol)
qDebug() << address.toString();
}
MainWindow::~MainWindow()
{
delete ui;
}
运行输出的信息:IP Address: (QHostAddress("fe80::XXXX:XXXX:XXXX:XXXX%XX"), QHostAddress("fe80::XXXX:XXXX:XXXX:XXXX%XX"), QHostAddress("fe80::XXXX:XXXX:XXXX:XXXX%XX"), QHostAddress("fe80::XXXX:XXXX:XXXX:XXXX%XX"), QHostAddress("192.168.XXX.X"), QHostAddress("192.168.XXX.X"), QHostAddress("192.168.XXX.X"), QHostAddress("192.168.XXX.X"))
4、外网地址
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtNetwork>
/*外网ip*/
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QEventLoop>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//获取公网IP
QString qstr=returnOutIP();
qDebug() << qstr;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::lookedUp(const QHostInfo &host)
{
qDebug() << host.addresses().first().toString();
}
QString MainWindow::returnOutIP()
{
return GetNetIP(GetHtml("http://www.3322.org/dyndns/getip"));
}
QString MainWindow::GetHtml(QString url)
{
QNetworkAccessManager *manager = new QNetworkAccessManager();
QNetworkReply *reply = manager->get(QNetworkRequest(QUrl(url)));
QByteArray responseData;
QEventLoop eventLoop;
QObject::connect(manager, SIGNAL(finished(QNetworkReply *)), &eventLoop, SLOT(quit()));
eventLoop.exec();
responseData = reply->readAll();
return QString(responseData);
}
QString MainWindow::GetNetIP(QString webCode)
{
QString tmp = webCode.split("[").last();
return tmp.split("]").first();
}
运行输出的信息:"123.XXX.XXX.XXX\n"