当前位置: 首页 > news >正文

QT网络编程之获取本机网络信息

一.概述

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

1.QHostInfo 类(显示和查找本地的信息)

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

 推荐一个不错的人工智能学习网站,通俗易懂,内容全面,作为入门科普和学习提升都不错,分享一下给大家:https://www.captainbed.cn/ai

二.代码实现

1.dialog.h

#ifndef DIALOG_H

#define DIALOG_H

#include    <QDialog>

#include    <QHostInfo>

namespace Ui {

class Dialog;

}

class Dialog : public QDialog

{

    Q_OBJECT

public:

    explicit Dialog(QWidget *parent = 0);

    ~Dialog();

private slots:

    void lookedUpHostInfo(const QHostInfo &host);

    void on_btnGetHostInfo_clicked();

    void on_btnDetail_clicked();

    void on_btnLookup_clicked();

    void on_btnALLInterface_clicked();

    void on_btnClear_clicked();

private:

    Ui::Dialog *ui;

    QString  protocolName(QAbstractSocket::NetworkLayerProtocol protocol);

};

#endif // DIALOG_H

2.dialog.cpp

#include "dialog.h"

#include "ui_dialog.h"

#include    <QHostInfo>

#include    <QNetworkInterface>

Dialog::Dialog(QWidget *parent) :

    QDialog(parent),

    ui(new Ui::Dialog)

{

    ui->setupUi(this);

}

Dialog::~Dialog()

{

    delete ui;

}

void Dialog::lookedUpHostInfo(const QHostInfo &host)

{//查找主机信息的槽函数

    QList<QHostAddress> addList=host.addresses();//

    if (!addList.isEmpty())

    for (int i=0;i<addList.count();i++)

    {

        QHostAddress aHost=addList.at(i);

        bool show=ui->chkOnlyIPv4->isChecked();//只显示IPv4

        if (show)

            show=QAbstractSocket::IPv4Protocol==aHost.protocol();

        else

            show=true;

        if (show) {

        ui->plainTextEdit->appendPlainText("协 议:"+protocolName(aHost.protocol()));

        ui->plainTextEdit->appendPlainText(aHost.toString());

        }

    }

}

void Dialog::on_btnGetHostInfo_clicked()

{//QHostInfo获取主机信息

    QString hostName=QHostInfo::localHostName();//本地主机名

    ui->plainTextEdit->appendPlainText("本机主机名:"+hostName+"\n");

    QHostInfo   hostInfo=QHostInfo::fromName(hostName); //本机IP地址

    QList<QHostAddress> addList=hostInfo.addresses();//IP地址列表

    if (!addList.isEmpty())

    for (int i=0;i<addList.count();i++)

    {

        QHostAddress aHost=addList.at(i); //每一项是一个QHostAddress

        bool show=ui->chkOnlyIPv4->isChecked();//只显示IPv4

        if (show)

            show=(QAbstractSocket::IPv4Protocol==aHost.protocol()); //协议类型,

        else

            show=true;

        if (show) {

        ui->plainTextEdit->appendPlainText("协 议:"+protocolName(aHost.protocol()));//协议类型

        ui->plainTextEdit->appendPlainText("本机IP地址:"+aHost.toString()); //IP地址

        ui->plainTextEdit->appendPlainText("");

        }

    }

}

void Dialog::on_btnDetail_clicked()

{

    QList<QHostAddress> addList=QNetworkInterface::allAddresses();//

    if (!addList.isEmpty())

    for (int i=0;i<addList.count();i++)

    {

        QHostAddress aHost=addList.at(i);

        bool show=ui->chkOnlyIPv4->isChecked();//只显示IPv4

        if (show)

            show=QAbstractSocket::IPv4Protocol==aHost.protocol();

        else

            show=true;

        if (show)

        {

        ui->plainTextEdit->appendPlainText("协  议:"+protocolName(aHost.protocol()));

        ui->plainTextEdit->appendPlainText("IP地址:"+aHost.toString());

        ui->plainTextEdit->appendPlainText("");

        }

    }

}

void Dialog::on_btnLookup_clicked()

{//查找主机信息

    QString hostname=ui->editHost->text(); //主机名

    ui->plainTextEdit->appendPlainText("正在查找查找主机信息:"+hostname);

    QHostInfo::lookupHost(hostname,this,SLOT(lookedUpHostInfo(QHostInfo)));

}

void Dialog::on_btnALLInterface_clicked()

{//QNetworkInterface::allInterfaces()函数的使用

    QList<QNetworkInterface>    list=QNetworkInterface::allInterfaces();

    for(int i=0;i<list.count();i++)

    {

        QNetworkInterface aInterface=list.at(i);

        if (!aInterface.isValid())

           continue;

        ui->plainTextEdit->appendPlainText("设备名称:"+aInterface.humanReadableName());

        ui->plainTextEdit->appendPlainText("硬件地址:"+aInterface.hardwareAddress());

        QList<QNetworkAddressEntry> entryList=aInterface.addressEntries();

        for(int j=0;j<entryList.count();j++)

        {

            QNetworkAddressEntry aEntry=entryList.at(j);

            ui->plainTextEdit->appendPlainText("   IP 地址:"+aEntry.ip().toString());

            ui->plainTextEdit->appendPlainText("   子网掩码:"+aEntry.netmask().toString());

            ui->plainTextEdit->appendPlainText("   广播地址:"+aEntry.broadcast().toString()+"\n");

        }

        ui->plainTextEdit->appendPlainText("\n");

    }

}

QString Dialog::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 Dialog::on_btnClear_clicked()

{

    ui->plainTextEdit->clear();

}

三.测试结果

1.获取本机主机名和IP

2.获取所有IP地址

3.获取所有接口

4.查找域名的ip地址

相关文章:

QT网络编程之获取本机网络信息

一.概述 查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能&#xff0c;Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询 1.QHostInfo 类&#xff08;显示和查找本地的信息&#xff09; 2.QNetworkInterface 类&#xff08;获得应用程序上所在主机的…...

离线安装docker、docker-compose、Mysql镜像

离线安装docker docker-compose mysql镜像 一、下载docker docker-compose mysql 镜像文件 1、首先下载docker镜像 博主所用文件版本号&#xff1a; docker-23.0.6.tgz 下载docker 地址 &#xff1a;https://blog.csdn.net/xiaohanshasha/article/details/135489623?spm1001…...

Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)

Redis的实战篇-好友关注 目录 好友关注-关注和取关好友关注-共同关注好友关注-Feed流实现方案分析好友关注-推送到粉丝收件箱好友关注-滚动分页查询收件箱的思路好友关注-实现滚动分页查询 1. 好友关注-关注和取关 1.1 概述 在好友关注系统中&#xff0c;用户可以关注其他用…...

数据库基本介绍及编译安装mysql

目录 数据库介绍 数据库类型 数据库管理系统&#xff08;DBMS&#xff09; 数据库系统 DBMS的工作模式 关系型数据库的优缺点 编译安装mysql 数据库介绍 数据&#xff1a;描述事物的的符号纪录称为数据&#xff08;Data&#xff09; 表&#xff1a;以行和列的形式组成…...

代码随想录算法训练营第55天 | 583. 两个字符串的删除操作, 72. 编辑距离

动态规划章节理论基础&#xff1a; https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 583. 两个字符串的删除操作 题目链接&#xff1a;https://leetcode.cn/problems/delete-operation-for-two-strings/descrip…...

Guava之EventBus源码分析

简介 事件总线。 有助于深入理解代码的功能和实现细节。 可以了解代码背后的逻辑、算法、数据结构和设计模式等方面&#xff0c;从而更好地理解代码的作用和功能。 可以学习到业界的最佳实践和设计模式。 这有助于提高自己的编程水平&#xff0c;使你能够编写更高质量、可…...

Spark on Yarn安装配置

目录 前言 初了解spark Standalone模式 Yarn模式 前言 今天我们讲解Spark的安装配置&#xff0c;spark的部署分为两种&#xff0c;一种是Standalone模式&#xff0c;另一种就是on yarn 模式&#xff0c;我们这一节着重讲解on yarn 模式&#xff0c;因为符合生产活动&#…...

Debezium日常分享系列之:Debezium 2.5.3.Final发布

Debezium日常分享系列之&#xff1a;Debezium 2.5.3.Final发布 一、重大改变1.SQL Server 二、改进和变化1.Debezium 服务器的 TRACE 级别日志记录2.Informix 将 LSN 附加到事务标识符3.PostgreSQL 改进 三、Debezium技术总结 一、重大改变 1.SQL Server 首次部署连接器时&am…...

elment-ui el-tabs组件 每次点击后 created方法都会执行2次

先看错误的 日志打印: 错误的代码如下: 正确的日志打印: 正确的代码如下: 前言: 在element-ui的tabs组件中,我们发现每次切换页面,所有的子组件都会重新渲染一次。当子页面需要发送数据请求并且子页面过多时,这样会过多的占用网络资源。这里我们可以使用 v-if 来进行…...

sheng的学习笔记-AI-Network in Network(NIN)和1*1卷积

目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 简介 Network In Network 是发表于 2014 年 ICLR 的一篇 paper。当前被引了 3298 次。这篇文章采用较少参数就取得了 Alexnet 的效果&#xff0c;Alexnet 参数大小为 230M&#xff0c;而 Network In Network 仅为 29M&#x…...

【靶机测试--PHOTOGRAPHER: 1【php提权】】

前期准备 靶机下载地址&#xff1a; https://vulnhub.com/entry/photographer-1%2C519/ 信息收集 nmap 扫描同网段 ┌──(root㉿kali)-[/home/test/桌面] └─# nmap -sP 192.168.47.0/24 --min-rate 3333 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-19 07:37 …...

LeetCode每日一题——删除有序数组中的重复项

删除有序数组中的重复项OJ链接&#xff1a;26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 题目要求每个数只能出现一次&#xff0c;然后返回新数组的长度。仔细一看&#xff0c;其实与我们之前的移除元素那道题十分…...

元宇宙VR数字化艺术展降低办展成本

元宇宙AI时代已经来临&#xff0c;越来越多人期待在元宇宙数字空间搭建一个属于自己的虚拟展厅&#xff0c;元宇宙虚拟展厅搭建平台是VR公司深圳华锐视点为企业研发的可编辑工具&#xff0c;那么元宇宙虚拟展厅搭建平台有哪些新突破? 元宇宙虚拟展厅搭建平台采用了先进的web3D…...

聚类分析 | Matlab实现基于PCA+DBO+K-means的数据聚类可视化

聚类分析 | Matlab实现基于PCADBOK-means的数据聚类可视化 目录 聚类分析 | Matlab实现基于PCADBOK-means的数据聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 PCA&#xff08;主成分分析&#xff09;、DBO&#xff08;蜣螂优化算法&#xff09;和K-means聚类…...

使用 git 先提交后拉取的时候远程分支不允许问题

问题场景 修改本地代码使用 git 先提交后拉取的时候远程分支不允许的问题 修改本地代码时&#xff0c;远程分支存在其他新提交先执行了 git commit -m xxx update然后再执行 git pull 拉取远程分支代码&#xff0c;出现如下提示 hint: You have divergent branches and need…...

Unity 创建快捷方式开机自动启动

Unity 创建快捷方式自动启动 &#x1f32d;食用方法 &#x1f32d;食用方法 先导入插件包&#x1f448;&#xff0c;再 把导入的ZYF_AutoRunApp.cs 挂到物体上即可。 using System; using System.Collections; using System.Collections.Generic; using System.IO; using Uni…...

什么是docker(docker客户端、镜像、容器、仓库)

一、docker Docker 是一个开源的容器化平台&#xff0c;它可以让开发者打包应用程序及其依赖项成为一个轻量级、可移植的容器&#xff0c;然后在任何环境中运行。Docker 容器将应用程序及其依赖项打包到一个标准化单元中&#xff0c;包括代码、运行时环境、系统工具、系统库等…...

[Python人工智能] 四十三.命名实体识别 (4)利用bert4keras构建Bert+BiLSTM-CRF实体识别模型

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解如何实现中文命名实体识别研究,构建BiGRU-CRF模型实现。这篇文章将继续以中文语料为主,介绍融合Bert的实体识别研究,使用bert4keras和kears包来构建Bert+BiLSTM-CRF模型。然而,该代码最终结…...

Android Framework开发之Linux +Vim命令

一、linux常用命令 在Android源码开发中&#xff0c;Linux命令的运用是至关重要的。这些命令不仅帮助开发者有效管理文件、目录和系统资源&#xff0c;还能在源码编译、调试和排错过程中发挥关键作用。以下是对Android源码开发中常用Linux命令的更详细介绍&#xff1a; 当然可…...

MySQL 索引的10 个核心要点

文章目录 &#x1f349;1. 索引底层采用什么数据结构&#xff1f;为什么不用hash&#x1f349;2. B树与B树区别&#xff1f;为何用B树&#xff1f;&#x1f349;3. 自增主键理解&#xff1f;&#x1f349;4. 为什么自增主键不连续&#x1f349;5. Innodb为什么推荐用自增ID&…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...