QT Udp广播实现设备发现

测试环境

本文选用pc1作为客户端,pc2,以及一台虚拟机作为服务端

  • pc1,pc2(客户端):
    在这里插入图片描述
  • 虚拟机(服务端):
    在这里插入图片描述

客户端

  • 原理:客户端通过发送广播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域网内的所有设备收到该消息回复客户端即可。客户端通过收到的回复统计当前有哪些设备在线
  • 获取到本地的IP,getLocalIP函数获取到过滤了虚拟机网卡以及本地回环网卡后的ip地址。
    在这里插入图片描述
#include "udpclient.h"
#include <QDebug>
#include <QHostInfo>
#include <QNetworkInterface>
#include <iostream>udpClient::udpClient(QObject *parent) : QObject(parent)
{QString localIp = getLocalIP();udpSocket = new QUdpSocket;udpSocket->bind(QHostAddress(localIp),2001);connect(udpSocket,&QUdpSocket::readyRead,this,&udpClient::processData);}QString udpClient::getLocalIP() {QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();foreach (const QNetworkInterface &interface, interfaces) {QList<QNetworkAddressEntry> entries = interface.addressEntries();qDebug()<<"name:"<<interface.humanReadableName()<<endl;if(interface.humanReadableName().contains("Loopback") ||interface.humanReadableName().contains("VMware Network Adapter")){continue;}foreach (const QNetworkAddressEntry &entry, entries) {if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol) {qDebug() << "Local IP Address: " << entry.ip().toString()<< endl;}}}return QString();
}udpClient::~udpClient()
{if(udpSocket){delete udpSocket;}
}void udpClient::sendBroadCast()
{QByteArray datagram = "Device Discovery";udpSocket->writeDatagram(datagram,QHostAddress::Broadcast,8888);
}void udpClient::processData()
{while(udpSocket->hasPendingDatagrams()){QByteArray datagram;datagram.resize(udpSocket->pendingDatagramSize());QHostAddress sender;quint16 senderPort;udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);qDebug() << "Received response from: " << sender.toString()<<"port:"<<senderPort << endl;}
}

服务端

#include "udpserver.h"
#include <iostream>udpServer::udpServer(QObject *parent) : QObject(parent)
{udpSocket = new QUdpSocket(this);udpSocket->bind(QHostAddress::Any, 8888);connect(udpSocket, &QUdpSocket::readyRead, this, &udpServer::processPendingDatagrams);}void udpServer::processPendingDatagrams()
{while (udpSocket->hasPendingDatagrams()) {QByteArray datagram;datagram.resize(udpSocket->pendingDatagramSize());QHostAddress sender;quint16 senderPort;udpSocket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);std::cout << "Received discovery message: " << datagram.data() << std::endl;QByteArray response = "Device Found";udpSocket->writeDatagram(response, sender, senderPort);}
}

输出效果

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

了解Java内存模型(Java Memory Model, JMM)

了解Java内存模型&#xff08;Java Memory Model, JMM&#xff09; Java内存模型&#xff08;Java Memory Model, JMM&#xff09;是Java语言规范中规定的一组规则&#xff0c;定义了多线程程序中变量&#xff08;包括实例字段、静态字段和数组元素&#xff09;的访问方式。JM…

git 大文件上传失败 Please remove the file from history and try again.

根据提示执行命令 --- 查找到当前文件 git rev-list --objects --all | grep b24e74b34e7d482e2bc687e017c8ab28cd1d24b6git filter-branch --tree-filter rm -f 文件名 --tag-name-filter cat -- --all git push origin --tags --force git push origin --all --force

Fort Firewall防火墙工具v3.12.13

软件介绍 Fort Firewall是一款开源系统的免费防火墙&#xff0c;体积小巧、占用空间不大&#xff0c;可以为用户的电脑起到保护作用&#xff0c;该软件可以控制程序访问网络&#xff0c;控制用户的电脑网速&#xff0c;用户可以更轻松便捷的进行网络安全防护&#xff0c;保护系…

c# Attribute特性示范

[MyCustomAttribute("Example")] 中括号写在类前&#xff0c;表示此类具有此特性。 ”property” 译为“属性 Attribute用特性描述 using System;// 定义一个自定义特性 public class MyCustomAttribute : Attribute {public string Value { get; set; }public My…

什么是镜像源

镜像源在计算机领域中是一个重要的概念&#xff0c;下面我将用分点的方式清晰解释镜像源的定义、作用以及特点&#xff1a; 1. 定义 镜像源&#xff08;Mirror&#xff09;&#xff1a;是一个服务器&#xff0c;它存储了另一个服务器上的某些或全部内容的副本。这些内容可以包…

Sony前端连接功放:深度解析与实用指南

Sony前端连接功放&#xff1a;深度解析与实用指南 在音响设备连接中&#xff0c;Sony前端与功放的连接常常是一个令人困惑却又至关重要的环节。本文将从四个方面、五个方面、六个方面和七个方面详细解析Sony前端连接功放的步骤、技巧及注意事项&#xff0c;旨在帮助读者轻松完…

计算机网络 —— 网络层(IP数据报)

计算机网络 —— 网络层&#xff08;IP数据报&#xff09; 网络层要满足的功能IP数据报IP数据报格式IP数据报首部格式数据部分 IP数据报分片 我们今天进入网络层的学习。 网络层要满足的功能 网络层作为OSI模型中的第三层&#xff0c;是计算机网络体系结构的关键组成部分&…

实验六、IPv4 地址的子网划分,第 2 部分《计算机网络》

你有没有发现&#xff0c;困的时候真的清醒不了。 目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 完成本练习之后&#xff0c;您应该能够确定给定 IP 地址和子网掩码的子网信息。 知道 IP 地址、网络掩码和子网掩码后&#xff0c;您应该能够确定有关该 IP 地…

SpringBoot实现参数校验拦截(采用AOP方式)

一、AOP是什么&#xff1f; 目的&#xff1a;分离横切关注点&#xff08;如日志记录、事务管理&#xff09;与核心业务逻辑。 优势&#xff1a;提高代码的可读性和可维护性。 关键概念 切面&#xff08;Aspect&#xff09;&#xff1a;包含横切关注点代码的模块。通知&#xff…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 运输时间(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 运输时间(200分) 🌍 评测功能需要订阅专栏后私信联系清隆解…

【面试干货】索引的优缺点

【面试干货】索引的优缺点 1、创建索引可以大大提高系统的性能&#xff08;**优点**&#xff09;2、增加索引也有许多不利的方面&#xff08;**缺点**&#xff09; &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、创建索引可以大大提高系…

LiDAR360MLS 7.2.0 雷达点云数据处理软件功能介绍

新增模块和功能: 支持手持、背包数据的解算 SLAM解算成功率提升 SLAM解算效率提升 采集端与后处理端保持一致 赋色优化 新增平面图模块 新增平面图全自动矢量化功能 新增平面图矢量一键导出DXF功能 新增平面图正射影像一键导出功能 支持交叉、垂直绘制 支…

添加west扩展命令

使用west工具的帮助命令&#xff0c;west -h&#xff0c;不仅可以列出west工具的内置命令&#xff0c;也可以列举当前工程中实现的扩展命令&#xff0c;如build&#xff0c;flash等。 本文将介绍如何添加扩展命令。 west扩展命令的位置通过以下方式查找&#xff1a; 1. 首先找…

kafka消息积压处理方案

背景&#xff1a; 某值班的一天&#xff0c;生产出现消息积压问题&#xff0c;对此类的问题做出快速应对方案来避免同类型问题&#xff0c;防止影响范围进一步的扩大。 出现消费积压后如何处理&#xff1a; 首先优先处理消息积压&#xff0c;如果代码逻辑问题&#xff0c;立…

【第12章】SpringBoot实战篇之文件上传(含阿里云OSS上传)

文章目录 前言一、本地文件上传二、阿里云OSS上传1. 环境准备2.安装SDK3.使用长期访问凭证3.1 获取RAM用户的访问密钥3.2 配置RAM用户的访问密钥(Linux)3.3 从环境变量中获取RAM用户的访问密钥 4. 工具类5.使用 总结 前言 本章节介绍本地文件上传和阿里云OSS上传。 一、本地文…

Python 机器学习 基础 之 【实战案例】轮船人员获救预测实战

Python 机器学习 基础 之 【实战案例】轮船人员获救预测实战 目录 Python 机器学习 基础 之 【实战案例】轮船人员获救预测实战 一、简单介绍 二、轮船人员获救预测实战 三、数据处理 1、导入数据 2、对缺失数据的列进行填充 3、属性转换&#xff0c;把某些列的字符串值…

LSTM-Adaboost基于双向长短期记忆网络结合集成学习实现股价预测附matlab代码

% 股价预测 - LSTM-Adaboost集成学习 % 加载股价数据 load(‘stock_data.mat’); % 假设数据已经存储在stock_data.mat文件中 prices stock_data.prices; % 假设股价数据存储在名为prices的变量中 % 数据预处理 normalized_prices (prices - mean(prices)) / std(prices); …

数组中寻找符合条件元素的位置(np.argwhere,nonzero)

今天遇到一个问题&#xff0c;就是寻找符合条件的元素所在的位置&#xff0c;主要使用np.argwhere和nonzero函数 比如给我一个二维数组&#xff0c;我想知道其中元素大于15的位置 方法1 import numpy as np exnp.arange(30) enp.reshape(ex,[3,10]) print(e) print(e>15…

南山代理记账,为您提供专业、高效的服务和全方位的支持

随着商业活动的不断深化和扩展&#xff0c;企业的会计工作越来越重要&#xff0c;而作为一家专业的代理记账公司&#xff0c;“南山代理记账”始终致力于为客户提供专业、高效的服务&#xff0c;帮助他们在经营过程中更好地管理和运用资金。 南山代理记账公司的服务范围广泛&am…

【日记】遇到了一个 “不愿睁眼看世界也没受过社会毒打” 的逆天群友(464 字)

正文 今天坐在柜台玩了一天手机…… 手机都玩没电了快。下午在劝一个群友睁眼看世界&#xff0c;实在劝不动。他真的太逆天了&#xff0c;我不清楚这么高学历的人&#xff0c;怎么能说出这么天真的话。逆天又离谱。 晚上的时间几乎全在做家务。平时晚上都是跳舞来着&#xff0c…