【QT Windows 下检测以太网是否联网】

QT中以太网通信,模拟数据波形显示 ui->plainTextEdit_2->appendPlainText("服务器 IP 地址:"+ ui->comboBox->currentText());ui->plainTextEdit_2->appendPlainText("正在监听端口:"+ ui->spinBox->text());//波形定时器刷新函数。ui->plainTextEdit->appendPlainText("已停止监听端口:"+ ui->spinBox->text()); 阅读详情

实验环境

  1. QT版本:5.15.2
  2. VS:2019
  3. windows:win7_x64、win10_x32

获取网络适配器信息

获取网络适配信息,采用winApi:GetAdaptersInfo
需要注意的是,如果电脑上安装了虚拟机,那么获取到的网络适配器信息中将会包含虚拟网卡的信息。虚拟网卡的状态的是不确定的,需要排除。
真实的网卡,在描述中会带有“PCI”字样,虚拟网卡如果没有人为改动过,描述中则不会带有。
获取网卡信息 参考代码如下:

void GetNetworkAdapterInfo()
{
	PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO));
	ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
	if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) 
	{
		free(pAdapterInfo);
		pAdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen);
	}

	DWORD dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen);
	if (dwRetVal == NO_ERROR)
	{
		PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
		while (pAdapter) 
		{
			QString adapterName = pAdapter->AdapterName;
			QString adapterDecription = pAdapter->Description;
			QString adapterMac = BytesToMacAddress(pAdapter->Address, pAdapter->AddressLength);
			if (adapterDecription.contains("PCI", Qt::CaseInsensitive))
			{
				mEthernetMac = adapterMac;
				break;
			}

			pAdapter = pAdapter->Next;
		}
	}

	if (pAdapterInfo) 
	{
		free(pAdapterInfo);
	}	
}
QString BytesToMacAddress(const void* data, int size)
{
	if (nullptr == data || size <= 0)
	{
		return QString();
	}

	unsigned char macArr[MAC_SIZE] = { 0 };
	memcpy_s(macArr, MAC_SIZE, data, size);

	QString macStr = QString::asprintf("%02X:%02X:%02X:%02X:%02X:%02X", macArr[0], macArr[1], macArr[2], macArr[3], macArr[4], macArr[5]);
	return macStr;
}

网络配置变化检测

采用QNetworkConfigurationManager 和 QNetworkInterface来做网络变化的检测。当winodws网络环境产生变化,相应的网络配置也会产生变化,QNetworkConfigurationManager类将会发出configurationChanged信号。用 QNetworkInterface::allInterfaces()获取到所有的网络配置,找到之前记录的网卡,检查网卡的状态。
参考代码如下:

GetNetworkAdapterInfo();
if (CheckEthernetStatus())
{
	qDebug("已联网");
}
else 
{
	qDebug("未连接");
}

QNetworkConfigurationManager* mNetworkConfigurationManager = new QNetworkConfigurationManager(this);
connect(mNetworkConfigurationManager, &QNetworkConfigurationManager::configurationChanged, this, [=](const QNetworkConfiguration& config)
{
	if (CheckEthernetStatus())
	{
		qDebug("已联网");
	}
	else
	{
		qDebug("未连接");
	}
});
bool CheckEthernetStatus() 
{
	QList<QNetworkInterface> interfaceList = QNetworkInterface::allInterfaces();
	for (const QNetworkInterface& interface : interfaceList)
	{
		if (interface.flags().testFlag(QNetworkInterface::IsLoopBack)) 
		{
			continue;
		}

		if (interface.type() == QNetworkInterface::Ethernet)
		{
			if (!mEthernetMac.isEmpty() && interface.hardwareAddress().compare(mEthernetMac) == 0)
			{
				if (interface.flags().testFlag(QNetworkInterface::IsRunning))
				{
					return true;
				}
			}
		}
	}

	return false;
}

总结

在windows上接入网线即可上网的情况,一般都是以太网的配置。因此这种方法,某种程度上,也可以用作网口网线插入、拔出的检测。宽带拨号上网未曾实验过,所以不清楚是否可行(预计应该不行,宽带拨号好像不是以太网的配置)。

Windows下Qt 5.13.0离线安装全攻略:断网跳过账号验证的3种方法 本文详细介绍了在Windows系统下离线安装Qt 5.13.0的三种实用方法,帮助开发者绕过强制登录验证。针对网络受限或不愿注册账号的场景,文章提供了物理断网、修改Hosts文件屏蔽验证域名以及使用预构建离线安装包等解决方案,并涵盖安装后的环境配置与常见问题排查,确保开发环境顺利搭建。 阅读详情

相关推荐

C++编程禁用网卡IPv6:原理、实现与Windows网络协议栈控制

在网络编程中,IPv6协议栈的兼容性问题常导致连接超时、DNS解析异常等故障,尤其在需要强制使用IPv4的企业级应用和游戏开发场景中。其核心原理在于操作系统通过注册表键值管理网络接口的协议绑定,其中Windows的`DisabledComponents`位掩码机制可精细控制IPv6组件行为。从技术价值看,直接操作注册表或通过WMI接口实现协议控制,能确保软件在网络环境中的行为一致性,避免依赖用户手动配置。对于C++开发者而言,掌握`GetAdaptersAddresses`获取网卡GUID、操作`HKEY_

weixin_30596023的博客 402

qt获得网络状态testNetOnIine

5.保证无毒 1.简单,方便,实用 3.实例可以自行改用 1.如有非法,本人无法律责任! 8.更多作品,查找标签“朱建强”7.下载,请杀毒! 4.如需联系我请看左边数字!1.如不知代表何物,那就放弃计算机吧! 0.还不懂?优快云老板不让我上传联系方式。

RK3572开发板:智能工控从选型到落地实践指南

嵌入式开发中,开发板是连接芯片评估与产品落地的关键桥梁。以RK3572为代表的Arm应用处理器,将CPU、NPU、GPU及丰富工业接口集成于单芯片,支持在Linux系统下同时完成边缘AI推理、人机交互与实时控制,改变了传统工控“PLC+工控机+AI盒子”的硬件堆叠模式。对于需要平衡算力、成本与功耗的智能设备,这类开发板提供了高性价比的解决方案。文章系统梳理了RK3572与单片机、高端RK3588的定位差异,并完整演示交叉编译工具链搭建、GPIO控制及Qt界面程序部署的工程流程,帮助开发者快速评估项目适配性并

weixin_34279579的博客 378

通过QT管理网络状态和网络连接

QT主要通过以下四个类实现对网络状态和网络连接的管理,四个类分别是: QNetworkConfigurationManager QNetworkConfiguration QNetworkSession QNetworkInterface

yang1fei2的博客 4530

RK3572开发板智能工控实战:从选型到交叉编译与系统部署

在嵌入式开发领域,开发板和单片机的区别是许多工程师转型时最先遇到的概念分岔。单片机适合任务明确、实时性高的控制场景,而智能工控设备往往需要同时处理图像识别、网络通信和交互界面,这促使开发者转向嵌入式Linux平台。RK3572开发板正是这类系统级处理器的典型代表,它通过挂载Ubuntu根文件系统,让开发者复用熟悉的工具链与开发环境。实际落地过程中,交叉编译是绕不开的关键环节,尤其是Qt程序的交叉编译,不仅涉及架构匹配,还要考虑动态库、显示插件等运行环境问题。从烧录系统、确认设备节点,到用systemd实现开

weixin_34242509的博客 344

eMMC存储的ARM开发板实战:从原理到部署

嵌入式Linux开发中,存储方案的选择直接影响系统稳定性与产品化进程。eMMC作为嵌入式设备的主流存储介质,通过内置控制器封装NAND Flash的复杂管理机制,提供块设备接口,降低了开发门槛。理解eMMC结构与启动过程,是构建可靠ARM开发板系统的基础。从U-Boot引导、内核挂载rootfs,到交叉编译环境搭建与容器化部署,合理规划8GB eMMC空间可满足工业场景的长期运行需求。相比TF卡,eMMC在随机读写、寿命和掉电保护方面具有显著优势,适合物联网网关、边缘计算和产品原型验证。本文基于ARM开发板

weixin_33835103的博客 289

QT检测本机网线拔插(Ubuntu Qt环境实现)

1、简介 在做网络通讯时,有时候需要检测本机的网线是否插上,以便提示用户。为了 实现本功能,现在在QT环境下调用linux C++的socket来检测检测网线的拔插。 2、主要封装好的接口(API) (1)、getEth0():此函数的功能是,本机中第一块有效网卡的名称 (2)、isNetworkOn():此函数的功能是,检查本机是否插上网线,(本函数如果放到定时器调用,可以时时检测网线的拔插)...

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 2417

ARM与X86在工业数据采集与控制中的选型与应用实战

数据采集(DAQ)是工业自动化和物联网系统的核心技术基础,其核心原理是将物理世界的模拟信号(如温度、压力、振动)通过传感器和信号调理电路转换为可被处理器处理的数字信号。这一过程涉及模数转换(ADC)、滤波、隔离等关键技术,其技术价值在于为状态监测、过程控制与预测性维护提供实时、准确的数据基石。在工业现场、试验台架及户外监测等应用场景中,处理器架构的选择直接决定了系统的性能边界、可靠性与成本。ARM架构以其低功耗、高集成度和确定的实时性,在分布式IO、PLC及便携设备中表现出色;而X86架构则凭借强大的通用计

weixin_30542079的博客 404

QT获取网线拔插状态以及扫描网卡信息

QT获取网线拔插状态以及扫描网卡信息 以下是代码,添加好相关头文件就可以使用 void MainWindow::scan_netlink() { QString localHostName=QHostInfo::localHostName(); ui->display->append(localHostName);//主机名 QHostInfo info=QHostInfo::fromName(localHostName); qDebug()<<"IP Address:"<&l

qq_37131073的博客 8127

基于TMS320F28379D的远程控制系统:通信协议与软硬件设计实战

在工业自动化与电机控制领域,高性能实时控制系统是实现精准运动控制与复杂算法执行的核心。其原理在于通过微控制器或DSP的专用外设与强大算力,在微秒级时间内完成信号采集、算法运算与驱动输出,从而确保系统的动态响应与稳定性。这一技术价值在于将理论控制模型转化为高可靠性的物理执行,广泛应用于伺服驱动、新能源逆变及精密仪器等场景。本文聚焦于如何为这类实时控制系统增添远程交互能力,以TMS320F28379D DSP为例,深入探讨了通信接口选型、电路设计要点及稳定可靠的双向通信协议构建方法,涵盖了CAN总线、UART等

weixin_34130389的博客 958

Wireshark实战指南:从安装到HTTPS流量解密全解析

网络协议分析是网络工程师、开发者和安全研究人员必备的核心技能,它涉及对数据包捕获、解析和调试的深入理解。其基本原理是通过监听网络接口,捕获原始数据流,并依据协议规范进行解码,从而透视网络通信的细节。这项技术的核心价值在于能够精准定位网络故障、分析应用性能瓶颈、进行安全审计和逆向工程。在Web开发、API调试、网络安全分析等场景中,协议分析工具的作用至关重要。本文将聚焦于行业广泛使用的Wireshark工具,针对HTTPS加密流量这一普遍痛点,详细讲解如何通过配置SSLKEYLOGFILE环境变量实现流量解密

weixin_30908941的博客 360

Qt+Windows API给指定网卡增加IP

//pro文件中加入network模块 #include <QNetworkInterface> #include <QProcess> //Windows API相关依赖 #include"iphlpapi.h" #pragma comment(lib,"Iphlpapi.lib") //Windows API相关依赖 //PIP_ADAPTER_INFO结构体存储...

左霖风的博客 1868

i.MX28 EVK开发板从开箱到启动:ARM9嵌入式系统实战指南

嵌入式系统开发始于对硬件平台的深入理解与正确配置。其核心在于处理器启动流程与板级支持包(BSP)的协同工作。启动流程定义了处理器上电后如何加载并执行第一段代码,而BSP则包含了操作系统与具体硬件主板之间的所有驱动和适配层,是系统稳定运行的基石。这种软硬件协同设计,对于工业控制、物联网网关等需要高可靠性和特定外设支持的应用场景至关重要。本文以经典的ARM9架构i.MX28处理器及其评估套件(EVK)为例,详细解析了从启动模式配置、电源管理到串口调试、系统启动的全过程,并提供了针对SD卡启动、Linux/Win

weixin_30460489的博客 614

物联网全栈开发实战系列文章汇总(共1361篇,持续更新)

物联网全栈开发实战专栏将涵盖各类单片机、嵌入式设备及驱动开发实例。从仿真到硬件,从单个实例到综合实例,从单个设备到多个设备的各种方式通信、联网等等。以实例为线索,从硬件到用户终端,掌握物联网全栈开发基础。.................................

视觉与物联智能 1万+

国产X86与国产ARM工控机选型:从架构差异到实战决策

在工业自动化领域,处理器的指令集架构决定了工控机的性能边界与生态兼容性。X86作为复杂指令集计算的代表,拥有庞大的Windows生态和丰富的工业软件支持,单核性能强劲;ARM则凭借精简指令集设计,在能效比和嵌入式场景中表现突出。二者在国产化背景下分别衍生出以兆芯、飞腾为代表的芯片阵营,各自适用于不同的控制、数据采集和视觉检测任务。选型时需综合评估操作系统适配、算力匹配、功耗散热、供应链稳定性和全生命周期成本,同时兼顾存量X86系统与新兴ARM设备的混合架构协同。掌握架构原理与应用场景的对应关系,是工控机选型

weixin_34161064的博客 442

机器视觉产线相机到PLC链路部署与接线实操指南

机器视觉是工业自动化的关键技术,通过相机采集图像并由算法完成质量判断。在实际产线中,相机、光源、嵌入式工控机与PLC需要组成闭环控制系统,其中信号触发、图像传输和结果反馈的时序与通信稳定性直接决定设备节拍和良率。硬触发IO、GigE Vision和Modbus TCP等协议的应用,能够实现毫秒级响应与可靠交互。针对传感器到PLC、PLC到相机、工控机到PLC的完整链路,需从硬件选型、物理接线、网络规划到通信握手逐一落实。本文系统讲解相机到PLC整套链路的部署要点,包括IP配置、触发模式、寄存器映射、接地规范

weixin_33933118的博客 325

嵌入式开发系统学习路线:从硬件认知到Linux驱动与AI部署实战

嵌入式系统作为融合计算机体系结构、电子电路与操作系统的专用计算机系统,其核心在于针对特定任务进行软硬件协同设计。从原理层面看,嵌入式开发涉及处理器架构、外设接口通信、实时调度等关键技术,其技术价值体现在对资源、功耗和可靠性的极致优化。在应用场景上,嵌入式系统广泛应用于智能家居、工业控制、边缘计算等领域。随着物联网和人工智能技术的发展,嵌入式AI部署和边缘计算成为行业热点。本文基于嵌入式Linux和单片机开发实践,系统梳理了从开发环境搭建、外设驱动到系统移植的完整知识体系,并探讨了TensorFlow Lit

311

C++局域网通信系统:UDP/TCP混合协议设计与源码解析

网络编程是计算机通信的基础,其核心在于理解不同传输层协议的原理与适用场景。UDP协议以其无连接、低延迟的特性,常被用于局域网内的广播发现与状态通知;而TCP协议则通过面向连接、可靠交付的机制,保障了数据的有序与完整传输,是文件与消息传输的基石。在工程实践中,混合使用UDP与TCP协议,能充分发挥各自优势,构建高效、稳定的通信系统。这种技术方案尤其适用于对数据私密性、传输延迟有严苛要求的内网环境,例如企业内部通信、机房设备协同等场景。本文以经典的“飞鸽传书”项目为例,深入剖析其C++实现的服务器与客户端源码,

weixin_34245749的博客 329
上一篇: 【QSS学习】
下一篇: 【VS 局域网内 远程调试】
阿克蒙德麟
博客等级 码龄6年 17粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值