Qt网络通信——获取本机网络信息

查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能,Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询

1.QHostInfo 类(显示和查找本地的信息)是的主要函数

 类别 函数原型作用
公共函数QList <QHostAdress> address()返回与hostName()主机关联的IP地址列表
QString hostName()返回通过IP查找的主机的名称
静态函数QHostInfo fromName(QSring &name)返回指定主机名的IP地址
QHostInfo localHostName()返回本机的主机名
int lookupHost(QString &name,QObject *receiver,char*member)以异步方式根据主机名查找主机的IP地址,并返回一个表示本次查找的ID,可用于abortHostLookup()

int lookupHost(QString &name,QObject *receiver,char*member)

name可以是主机名,可以是域名或者是一个IP地址。receiver和member指定一个响应函数的接收者和槽函数名称。

2.QNetworkInterface 类(获得应用程序上所在主机的所有网络接口,包括子网掩码和广播地址等)的主要函数

类别 函数原型作用
公共函数QList <QNetworkAddressEntry> addressEntries()返回该网络接口(包括子网掩码和广播地址)的IP列表
QString   hardwareAddress()返回该接口的低级硬件地址,以太网里就是MAC地址
QString  humanReadableName()

返回可以读懂的接口名称,如果名称不太确定,得到的就是name()函数的返回值

bool isValid()如果接口信息有效就返回true
QString name()返回网络接口名称
静态函数QList <QHostAddress> allAddress()返回主机上所有IP地址的列表
QList <QNetworkInterface> allInterfaces()返回主机上所有接口的网络列表

QNetworkInterface 中包含的网络信息接口有IP地址,子网掩码和广播地址

分别用:ip()、netmask() 、broadcast()函数返回

NetworkInformation.h
#ifndef NETWORKINFORMATION_H
#define NETWORKINFORMATION_H#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QMessageBox>
#include <QGridLayout>
#include <QHostInfo>
#include <QNetworkInterface>
class NetworkInformation : public QWidget
{Q_OBJECTpublic:NetworkInformation(QWidget *parent = nullptr);~NetworkInformation();void getHostInformation();  //获取主机信息public slots:void slotDetail();private:QLabel *lab_host;QLineEdit *lineEdit_hostName;QLabel *lab_IpAdress;QLineEdit *lineEdit_IpAdress;QPushButton *btn_detail;QGridLayout *mainLayout;};
#endif // NETWORKINFORMATION_H

NetworkInformation.cpp

#include "networkinformation.h"NetworkInformation::NetworkInformation(QWidget *parent): QWidget(parent)
{lab_host=new QLabel(QStringLiteral("主机名:"));lineEdit_hostName=new QLineEdit;lab_IpAdress=new QLabel(QStringLiteral("IP地址:"));lineEdit_IpAdress=new QLineEdit;btn_detail=new QPushButton(QStringLiteral("详细"));mainLayout=new QGridLayout;mainLayout->addWidget(lab_host,0,0);mainLayout->addWidget(lineEdit_hostName,0,1);mainLayout->addWidget(lab_IpAdress,1,0);mainLayout->addWidget(lineEdit_IpAdress,1,1);mainLayout->addWidget(btn_detail,2,0,1,2);mainLayout->addWidget(lab_host,0,0);setLayout(mainLayout);getHostInformation();connect(btn_detail,SIGNAL(clicked()),this,SLOT(slotDetail()));}NetworkInformation::~NetworkInformation()
{
}//获取主机信息
void NetworkInformation::getHostInformation()
{QString localHostName=QHostInfo::localHostName();   //获取主机名lineEdit_hostName->setText(localHostName);QHostInfo hostInfo=QHostInfo::fromName(localHostName);//本机的IP地址QList<QHostAddress> listAdress=hostInfo.addresses();  //IP地址列表if(!listAdress.isEmpty()){lineEdit_IpAdress->setText(listAdress.first().toString());  //如果主机的IP列表不为空,则使用其第一个IP地址}}//获得与网络接口相关的信息
void NetworkInformation::slotDetail()
{QString detail="";QList<QNetworkInterface> list=QNetworkInterface::allInterfaces(); //主机上所有的接口的网络列表for(int i=0;i<list.count();i++){QNetworkInterface interface=list.at(i);detail=detail+(QStringLiteral("设备:"))+interface.name()+'\n'; // 获取网络接口的名字detail=detail+(QStringLiteral("硬件地址:"))+interface.hardwareAddress()+'\n';//获取网络接口的硬件地址QList<QNetworkAddressEntry> entryList=interface.addressEntries();  //返回网络接口(包括子网掩码和广播地址)的Ip地址列表for(int j=0;j<list.count();j++){QNetworkAddressEntry entry=entryList.at(i);detail=detail+'\t'+(QStringLiteral("IP地址:"))+entry.ip().toString()+'\n';detail=detail+'\t'+(QStringLiteral("子网掩码:"))+entry.netmask().toString()+'\n';detail=detail+'\t'+(QStringLiteral("广播地址:"))+entry.broadcast().toString()+'\n';}QMessageBox::information(this,(QStringLiteral("Detail")),detail);}}

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/95691.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《论文阅读21》Equivariant Multi-View Networks

一、论文 研究领域&#xff1a;计算机视觉 | 多视角数据处理中实现等变性论文&#xff1a;Equivariant Multi-View Networks ICCV 2019 论文链接视频链接 二、论文简述 在计算机视觉中&#xff0c;模型在不同视角下对数据&#xff08;例如&#xff0c;点云、图像等&#xff0…

Python语音识别处理详解

概要 人们对智能语音助手的需求不断提高&#xff0c;语音识别技术也随之迅速发展。在这篇文章中&#xff0c;我们将介绍如何使用Python的SpeechRecognition和pydub等库来实现语音识别和处理&#xff0c;从而打造属于自己的智能语音助手。 1. 什么是语音识别&#xff1f; 语音…

第2章 Linux多进程开发 2.18 内存映射

内存映射&#xff1a;可以进行进程间的通信 1.如果对mmap的返回值(ptr)做操作(ptr), munmap是否能够成功? void * ptr mmap(…); ptr; 可以对其进行操作 munmap(ptr, len); // 错误,要保存地址 2.如果open时O_RDONLY, mmap时prot参数指定PROT_READ | PROT_WRITE会怎样? 错…

JavaScript(函数,作用域和闭包)

目录 一&#xff0c;什么是函数1.1&#xff0c;常用系统函数1.2&#xff0c;函数声明 1.3&#xff0c;函数表达式二&#xff0c;预解析2.1&#xff0c;函数自调用 2.2&#xff0c;回调函数三&#xff0c;变量的作用域3.1&#xff0c;隐式全局变量 四&#xff0c;作用域与块级作…

CLIP:连接文本-图像

Contrastive Language-Image Pre-Training CLIP的主要目标是通过对比学习&#xff0c;学习匹配图像和文本。CLIP最主要的作用&#xff1a;可以将文本和图像表征映射到同一个表示空间 这是通过训练模型来预测哪个图像属于给定的文本&#xff0c;反之亦然。在训练过程中&#…

Kitchen Hook

双扛厨房排钩&#xff1a;挂刀具

基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

大学生攻略:正确的购买和使用你的电脑

笔者是计算机专业在读大学生&#xff0c;从小学开始接触电脑&#xff0c;进行过各种操作(更换硬件维修&#xff0c;换系统&#xff0c;系统命令行&#xff0c;管理员权限&#xff0c;无视风险继续安装&#xff0c;没有这条 )&#xff0c;相对大学生有一定参考价值。 购买 1.买…

Python Opencv实践 - Canny边缘检测

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_GRAYSCALE) print(img.shape)#图像Canny边缘检测 #cv.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradien…

【Locomotor运动模块】瞬移

文章目录 一、原理二、两种类型1、Instant(立刻)2、Dash&#xff08;猛冲&#xff09; 三、瞬移区域、瞬移点1、瞬移区域2、瞬移点 一、原理 抛物线指针选择好目标位置&#xff0c;然后告诉瞬移预设体&#xff1a;你想法把游戏区域弄到目标位置来 解释&#xff1a;抛物线指针选…

LNMP架构:搭建Discuz论坛

文章目录 1. 编译安装Nginx1.1 前置准备1.2 编译安装1.3 添加nginx系统服务 2.编译安装MySql2.1 前置准备2.2 编译安装2.3 修改mysql 配置文件2.4 设置路径环境变量2.5 初始化数据库2.6 添加musql系统服务2.7 修改MySql登录密码 3. 编译安装PHP3.1 前置准备3.2 编译安装3.3 复制…

【算法题】1761. 一个图中连通三元组的最小度数

题目&#xff1a; 给你一个无向图&#xff0c;整数 n 表示图中节点的数目&#xff0c;edges 数组表示图中的边&#xff0c;其中 edges[i] [ui, vi] &#xff0c;表示 ui 和 vi 之间有一条无向边。 一个 连通三元组 指的是 三个 节点组成的集合且这三个点之间 两两 有边。 连…