C# 基于.NET Framework框架WPF应用程序-MQTTNet库实现MQTT消息订阅发布
C# 基于.NET Framework框架WPF应用程序-MQTTNet库实现MQTT消息订阅发布
- MQTT简述
- MQTTNet简述
- 创建项目(基于.NET Framework框架)
- 安装MQTTNet库
- 项目源码
- 运行效果
MQTT简述
mqtt官网
MQTTNet简述
MQTTnet
MQTTnet 是一个强大的开源 MQTT 客户端库,适用于 C# 平台。它提供了丰富的功能和灵活的 API,可以轻松地构建基于 MQTT 协议的应用程序。
创建项目(基于.NET Framework框架)
安装MQTTNet库
- NuGet包管理器 搜索MQTTNet
项目源码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Server;
using MQTTnet.Adapter;
using MQTTnet.Protocol;
using MQTTnet.Formatter;
using MQTTnet.Extensions;namespace MQTTNetDemo
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public string STR_MQTT_HOST = "mqtt borker host"; // MQTT borker addresspublic string STR_MQTT_USERNAME = "your username";public string STR_MQTT_PASSWORD = "your password";public string STR_MQTT_CLINETID = "mqtt clientid";public string STR_MQTT_SUBTOPIC = "topic_device"; // 订阅Topicpublic string STR_MQTT_PUBTOPIC = "topic_server"; // 发布Topicprivate MqttFactory mqttFactory = new MqttFactory(); // 创建MQTT工厂实例private IMqttClient mqttClient = null; // 定义MqttClient接口public MainWindow(){InitializeComponent();}/// <summary>/// 连接MQTT服务/// </summary>/// <returns></returns>private async Task UserMqttConnect(){ mqttClient = mqttFactory.CreateMqttClient();var mqttClientOptions = new MqttClientOptionsBuilder().WithTcpServer(STR_MQTT_HOST, 1883).WithCredentials(STR_MQTT_USERNAME, STR_MQTT_PASSWORD).WithClientId(STR_MQTT_CLINETID).WithCleanSession(true).Build();var response = await mqttClient.ConnectAsync(mqttClientOptions);Console.WriteLine("The MQTT Client is connected.");Console.WriteLine(response.ToString());}/// <summary>/// 断开MQTT服务/// </summary>/// <returns></returns>private async Task UserMqttDisconnect(){await mqttClient.DisconnectAsync();mqttClient.Dispose();Console.WriteLine("The MQTT Client is Disconnected."); }/// <summary>/// MQTT发布消息/// </summary>/// <param name="payload">消息内容</param>/// <returns></returns>public async Task UserMqttPublishMessage(string payload){if (mqttClient != null && mqttClient.IsConnected == true){var publishPacket = new MqttApplicationMessageBuilder().WithTopic(STR_MQTT_PUBTOPIC).WithPayload(payload).WithQualityOfServiceLevel(MqttQualityOfServiceLevel.ExactlyOnce).Build();//MqttQualityOfServiceLevel.AtMostOnce;//MqttQualityOfServiceLevel.AtLeastOnce//MqttQualityOfServiceLevel.ExactlyOnce;await mqttClient.PublishAsync(publishPacket);}else{MessageBox.Show("MQTT Client is Disconnected!");}}/// <summary>/// MQTT订阅消息/// </summary>/// <returns></returns>private async Task UserMqttSubscribeMessage(){await mqttClient.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic(STR_MQTT_SUBTOPIC).WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce).Build());mqttClient.ApplicationMessageReceivedAsync += delegate (MqttApplicationMessageReceivedEventArgs args){// TODO: 解析订阅消息payload内容var payload = Encoding.UTF8.GetString(args.ApplicationMessage.PayloadSegment.Array);Console.WriteLine("Recv Message:" + payload);Console.WriteLine("Recv ClientID:" + args.ClientId);Console.WriteLine("Recv Topic:" + args.ApplicationMessage.Topic);Console.WriteLine("Recv Retain:" + args.ApplicationMessage.Retain); // 指示消息是否为保留消息Console.WriteLine("Recv QOS:" + args.ApplicationMessage.QualityOfServiceLevel);// Now respond to the broker with a reason code other than success.args.ReasonCode = MqttApplicationMessageReceivedReasonCode.ImplementationSpecificError;args.ResponseReasonString = "That did not work!";// User properties require MQTT V5!args.ResponseUserProperties.Add(new MQTTnet.Packets.MqttUserProperty("My", "Data"));// Now the broker will resend the message again;return Task.CompletedTask;};Console.WriteLine("The MQTT is subscribe ...\n");}private async void btnMqttConnect_Click(object sender, RoutedEventArgs e){await UserMqttConnect();}private async void btnMqttDisconnect_Click(object sender, RoutedEventArgs e){await UserMqttDisconnect();}private async void btnMqttSubscribe_Click(object sender, RoutedEventArgs e){await UserMqttSubscribeMessage();}private async void btnMqttPublish_Click(object sender, RoutedEventArgs e){if ("" != textBoxMqttPublishMessage.Text){string payload = textBoxMqttPublishMessage.Text.ToString();await UserMqttPublishMessage(payload);}else{MessageBox.Show("发布消息内容为空!");} }}
}
运行效果
相关文章:
C# 基于.NET Framework框架WPF应用程序-MQTTNet库实现MQTT消息订阅发布
C# 基于.NET Framework框架WPF应用程序-MQTTNet库实现MQTT消息订阅发布 MQTT简述MQTTNet简述创建项目(基于.NET Framework框架)安装MQTTNet库项目源码运行效果 MQTT简述 mqtt官网 MQTTNet简述 MQTTnet MQTTnet 是一个强大的开源 MQTT 客户端库&#…...
Python实现视频播放器
Python实现视频播放器 Python实现视频播放器,在如下博文中介绍过 Python实现本地视频/音频播放器https://blog.csdn.net/cnds123/article/details/137874107 Python简单GUI程序示例 中 “四、视频播放器” https://blog.csdn.net/cnds123/article/details/122903…...
介绍一款飞算JavaAI编程工具,集成到idea,图文并茂
飞算的插件下载地址,里边也有安装步骤: JavaAI 下载 从file-》setting-》plugin,然后走图中所示 选择从磁盘安装插件:找到下载好的压缩包然后进行idea重启 根据提示模块可以生成代码,就是需要等待,后期不…...
【大数据】Spark Executor内存分配原理与调优
【大数据】Spark Executor内存管理与调优 Executor内存总体布局 统一内存管理 堆内内存 (On-heap Memory) 堆外内存 (Off-heap Memory) Execution 内存和 Storage 内存动态占用机制 任务内存管理(Task Memory Manager) 只用了堆内内存的示例 用了…...
Python 课堂点名桌面小程序
一、场景分析 闲来无事,老婆说叫我开发一个课堂点名桌面小程序,给她在课堂随机点名学生问问题。 人生苦短,那就用 Python 给她写一个吧。 二、依赖安装 因为要用到 excel,所以安装两个依赖: pip install openpyxl…...
配置Spring Boot中的Jackson序列化
配置Spring Boot中的Jackson序列化 在开发基于Spring Boot的应用程序时,Jackson是默认的JSON序列化和反序列化工具。它提供了强大的功能,可以灵活地处理JSON数据。然而,Jackson的默认行为可能无法完全满足我们的需求。例如,日期格…...
Rust学习总结之-match
Rust 有一个叫做 match 的极为强大的控制流运算符,它允许我们将一个值与一系列的模式相比较,并根据相匹配的模式执行相应代码。模式可由字面量、变量、通配符和许多其他内容构成。 一:match定义 可以把 match 表达式想象成某种硬币分类器&a…...
实践教程:使用DeepSeek实现PDF转Word的高效方案
🎈Deepseek推荐工具 PDF文件因其跨平台、格式稳定的特性被广泛使用,但在内容编辑场景中,用户常需将PDF转换为可编辑的Word文档。传统的付费工具(如Adobe Acrobat)或在线转换平台存在成本高、隐私风险等问题。本文将使…...
鸿蒙 ArkUI 实现 2048 小游戏
2048 是一款经典的益智游戏,玩家通过滑动屏幕合并相同数字的方块,最终目标是合成数字 2048。本文基于鸿蒙 ArkUI 框架,详细解析其实现过程,帮助开发者理解如何利用声明式 UI 和状态管理构建此类游戏。 一、核心数据结构与状态管理…...
az devops login报错:Failed to authenticate using the supplied token.
PowerShell,az devops login报错: Failed to authenticate using the supplied token. 检查了一下PAT token是对的。 检查命令: az devops login --organization https://dev.azure.com/xxxxxxxx/ 乍一看好像没问题问题,然后想…...
C ++ 静态存储区+堆空间
静态存储区 特点: 1:生命周期很长,main函数开始之前就存在,main函数结束,才结束 2:同名变量的管理,与栈不一样(重名变量前提,作用域一样): 栈:遇到重名变…...
gtest 和 gmock讲解
Google Test(gtest)和 Google Mock(gmock)是 Google 开发的用于 C 的测试框架和模拟框架,以下是对它们的详细讲解: Google Test(gtest) 简介 Google Test 是一个用于 C 的单元测试框…...
docker的下载与使用(一)
本文默认使用linux系统以及会linux的基本指令,windows下安装docker较为繁琐 docker是什么 Docker 是一个开源的应用容器引擎,基于go 语言并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&…...
鸿蒙HarmonyOS NEXT开发:组件-样式-基础 2
// 1 // 2 ArkUI 基本语法 // 方舟开发框架(简称:ArkUI),是一套 构建HarmonyOS应用 界面 的框架。 // 构建页面的最小单位就是 "组件"。 // 组件名(参数) { // 内容 // } // .属性1() // .属性2() // .属性N() import text from @ohos.graphics.text // @En…...
如何理解数据库的几种事务隔离级别?以及如何理解脏读、不可重复度、幻读?
在多用户并发访问数据库时,数据库系统需要通过事务隔离级别来控制不同事务之间的相互影响。不同的隔离级别可以避免或减少在并发环境下可能出现的数据不一致或冲突。常见的事务隔离级别有四种:读未提交(Read Uncommitted)、读已提…...
计算机网络基础简答题资料(对口高考)
1、什么是计算机网络?计算机网络的功能有哪些? 答案:计算机网络,是指将分布在不同地理位置、具有独立功能的多台计算机及其外围设备,通过通信设备和通信线路连接起来,在网络操作系统、网络管理软件及网络通…...
在docker容器中运行vllm部署deepseek-r1大模型
# 在本地部署python环境 cd /app/ python -m venv myenv # 激活虚拟环境 source /app/myenv/activate # 要撤销激活一个虚拟环境,请输入: deactivate# 进入虚拟环境安装modelscope pip install modelscope# 下载大模型(7B为例) modelscope do…...
HeidiSQL如何替换代码中的某些信息
1.SQL代码里的某些内容,比如2025年这个日期信息,我想替换成2024年的,按照:“搜索”---“替换文本”然后按照图片上的步骤来就可以了,特别是在sql代码有几百行甚至几千行的时候使用 2.SQL代码的表格对象中的数据如何一次性把某个内…...
Wireshark 插件开发实战指南
Wireshark 插件开发实战指南 环境搭建流程图 #mermaid-svg-XpNibno7BIyfzNn5 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XpNibno7BIyfzNn5 .error-icon{fill:#552222;}#mermaid-svg-XpNibno7BIyfzNn5 .error-t…...
【大模型➕知识图谱】大模型结合医疗知识图谱:解锁智能辅助诊疗系统新范式
【大模型➕知识图谱】大模型结合医疗知识图谱:解锁智能辅助诊疗系统新范式 大模型结合医疗知识图谱:解锁智能辅助诊疗系统新范式引言一、系统架构1.1 系统架构图1.2 架构模块说明1.2.1 用户输入1.2.2 大模型(语义理解与意图识别)1.2.3 Agent(问题解析与任务分配)1.2.4 问…...
大模型应用落地具体规划方案
摘要 本篇文章主要探讨大模型应用落地的具体规划方案,包含六点内容的分享,分别是: 大模型本地部署架构 大模型应用交互场景 基于阿里云RAG 项目的实现方案 大模型推荐落地场景方案 大模型应用落地发展规划 大模型开源架构选型推荐 在阅…...
【Qt】MVC设计模式
目录 一、搭建MVC框架 二、创建数据库连接单例类SingleDB 三、数据库业务操作类model设计 四、control层,关于model管理类设计 五、view层即为窗口UI类 一、搭建MVC框架 里面的bin、lib、database文件夹以及sqlite3.h与工程后缀为.pro文件的配置与上次发的文章…...
python量化交易——金融数据管理最佳实践——qteasy创建本地数据源
文章目录 qteasy金融历史数据管理总体介绍本地数据源——DataSource对象默认数据源查看数据表查看数据源的整体信息最重要的数据表其他的数据表 从数据表中获取数据向数据表中添加数据删除数据表 —— 请尽量小心,删除后无法恢复!!总结 qteas…...
深入探索Python机器学习算法:监督学习(线性回归,逻辑回归,决策树与随机森林,支持向量机,K近邻算法)
文章目录 深入探索Python机器学习算法:监督学习一、线性回归二、逻辑回归三、决策树与随机森林四、支持向量机五、K近邻算法 深入探索Python机器学习算法:监督学习 在机器学习领域,Python凭借其丰富的库和简洁的语法成为了众多数据科学家和机…...
word转换为pdf后图片失真解决办法、高质量PDF转换方法
1、安装Adobe Acrobat Pro DC 自行安装 2、配置Acrobat PDFMaker (1)点击word选项卡上的Acrobat插件,(2)点击“首选项”按钮,(3)点击“高级配置”按钮(4)点…...
【MATLAB例程】三维下的IMM(交互式多模型),模型使用CV(匀速)和CA(匀加速)
给出三维下的交互式多模型(IMM)matlab例程,模型使用匀速运动CV和匀加速运动CA,滤波使用EKF(扩展卡尔曼滤波) 文章目录 代码运行结果程序结构 代码讲解模型定义:轨迹生成:IMM核心流程…...
千峰React:Hooks(下)
useLayoutEffect useLayoutEffect在useEffect之前触发 这样会闪屏,因为是异步的,两次都渲染了 import {useEffect,useState } from react;function App() {const [msg,setMsg] useState(hello App)useEffect(() > {setMsg(hello useEffect)});retu…...
突破网络壁垒:实现 Mac SSH 访问 Windows WSL Ubuntu 的最佳实践20250301
突破网络壁垒:实现 Mac SSH 访问 Windows WSL Ubuntu 的最佳实践 背景与痛点 在现代开发环境中,开发者通常会面临不同操作系统之间的协同工作。例如: 主要开发环境位于 Windows 的 WSL Ubuntu 子系统需要从局域网内的 Mac 设备进行远程访问…...
【开源-鸿蒙土拨鼠大理石系统】鸿蒙 HarmonyOS Next App+微信小程序+云平台
✨本人自己开发的开源项目:土拨鼠充电系统 ✨踩坑不易,还希望各位大佬支持一下,在GitHub给我点个 Start ⭐⭐👍👍 ✍GitHub开源项目地址👉:https://github.com/lusson-luo/HarmonyOS-groundhog-…...
RAG 阿里云
RAG-阿里云Spring AI Alibaba官网官网 RAG-阿里云Spring AI Alibaba官网官网 AI应用跑起来,取消一下航班的操作666...
python -ssh学习
def exe_sshcmd(ip,username,userpswd,port,cmd): """ 功能:SSH登录到指定设备,并执行对应的命令 入参:前四项为ssh登录shell的ip和port,具备管理员权限的用户名和密码, cmd可以…...
【Java学习】内部类
面向对象系列六 一、类级别 1.静态成员 2.非静态成员与方法 二、类的创建与成员管理 1.类的创建 2.类的成员管理 三、常见的内部类 1.非静态内部类 2.静态内部类 3.匿名内部类 4.局部内部类 一、类级别 1.1静态成员 静态成员是类级别的是能一路直属都是在类层面的&…...
养生,开启健康生活之门
在这个快节奏的时代,人们在忙碌奔波中,往往忽略了自身健康。养生保健,不再是老年人的专属,而是各个年龄段维持良好生活状态的关键,它是我们开启健康生活的一把钥匙。 规律作息是养生的基石。人体就像一台精密的仪器&am…...
1-3压缩命令
文章目录 1. tar1.1 压缩(.tar.gz .tgz .tar.bz2 )1.2 解压缩(.tar.gz .tgz .tar.bz2 ) 2.zip2.1 压缩(.zip)2.2 解压缩 3.xz3.1 压缩(.tar.xz)3.2 解压缩 1. tar 1.1 压缩(.tar.gz .tgz .tar.bz2 ) c…...
Dify使用和入门
第一步:了解 Dify 在开始之前,先简单了解一下 Dify 是什么: Dify 是一个开源的 LLM 应用开发平台,专注于帮助开发者快速构建生产级的生成式 AI 应用。它支持知识库集成、RAG(检索增强生成)技术、复杂工作…...
AcWing 5933:爬楼梯 ← 递归 / 递推 / 高精度
【题目来源】 https://www.acwing.com/problem/content/5936/ 【题目描述】 树老师爬楼梯,他可以每次走 1 级或者 2 级,输入楼梯的级数,求不同的走法数。 例如:楼梯一共有 3 级,他可以每次都走一级,或者第…...
WebGL 渲染器 WebGLRenderer
目录 Three.js封装的渲染器 .domElement属性 .setSize(width, height)方法 帧缓冲区的相关封装 渲染器方法.clear(color,depth,stencil) 渲染器方法.clearDepth() 渲染器属性.autoClear Three.js封装的渲染器 .domElement属性 如果想通过WebGL渲染一个三维场景&#…...
基于Three.js的3D赛车游戏开发实战详解
目录 一、项目效果预览二、核心技术架构2.1 三维场景构建2.2 赛道与车辆模型2.3 光照系统三、核心运动系统3.1 车辆运动控制3.2 物理模拟公式3.3 边界限制四、摄像机控制系统4.1 第三人称视角数学原理4.2 鼠标交互实现五、星空背景特效5.1 点云生成算法5.2 动态闪烁效果六、性能…...
⭐算法OJ⭐位操作实战【计数】(C++ 实现)
191. Number of 1 Bits Given a positive integer n, write a function that returns the number of set bits in its binary representation (also known as the Hamming weight). int hammingWeight(uint32_t n) {int count 0;while (n) {count n & 1; // 检查最低位…...
【通俗讲解电子电路】——从零开始理解生活中的科技(一)
导言:电子电路为什么重要? ——看不见的“魔法”,如何驱动你的生活? 清晨,当你的手机闹钟响起时,你可能不会想到,是电子电路在精准控制着时间的跳动;当你用微波炉加热早餐时&#…...
浏览器JS打不上断点,一点就跳到其他文件里。浏览器控制台 js打断点,指定的位置打不上断点,一打就跳到其他地方了。
关闭JavaScript 源代码映射,F12开发者模式 设置->偏好设置->源代码/来源->JavaScript 源代码映射。 肯定不是这个原因导致的,但这个办法可以暂时解决问题,点完这个东西就隐藏了webpack,有懂的来讲讲。 又浪费一个小时…...
浅谈人工智能之Windows安装llama factory
浅谈人工智能之Windows安装llama factory Llama Factory 是一个强大的工具,旨在帮助用户轻松管理和优化Llama模型的训练和部署。在某些情况下,您可能需要在部分互联网连接的环境中安装和使用Llama Factory。本文将详细介绍如何在Windows系统上这种情况下…...
mac电脑中使用无线诊断.app查看连接的Wi-Fi带宽
问题 需要检查连接到的Wi-Fi的AP硬件支持的带宽。 步骤 1.按住 Option 键,然后点击屏幕顶部的Wi-Fi图标;2.从下拉菜单中选择 “打开无线诊断”(Open Wireless Diagnostics);3.你可能会看到一个提示窗口,…...
Python--内置模块和开发规范(下)
2. 开发规范 2.1 单文件应用 文件结构示例 # 文件注释 import os import jsonDB_PATH "data.json" # 常量放顶部def load_data():"""函数注释:加载数据"""if os.path.exists(DB_PATH):with open(DB_PATH, "r"…...
vue3配置端口,比底部vue调试
import { fileURLToPath, URL } from ‘node:url’ import { defineConfig } from ‘vite’ import vue from ‘vitejs/plugin-vue’ import vueJsx from ‘vitejs/plugin-vue-jsx’ // 关闭vue底部调试模式 // import vueDevTools from ‘vite-plugin-vue-devtools’ // htt…...
代码随想录day51
647. /** lc appleetcode.cn id647 langcpp** [647] 回文子串*/// lc codestart #include<iostream> #include<vector> #include<string> using namespace std; class Solution { public:int countSubstrings(string s) {vector<vector<bool>> …...
B2B2C多语言电商系统代销逻辑设计和开发
随着全球电商市场的快速发展,B2B2C(Business-to-Business-to-Consumer)模式逐渐成为企业拓展业务的重要方式。特别是在多语言、多文化的国际市场环境中,B2B2C多语言电商系统的代销功能为企业提供了灵活的业务模式,帮助…...
示波器探头衰减值:简单来说就是“信号缩小器
一、什么是衰减值 衰减值就是探头把信号“缩小”多少倍再传给示波器。比如: 1X衰减:信号原样传输(不缩小),适合测小电压(比如手机电池3.7V)。 10X衰减:信号缩小10倍,适…...
Nginx系列06(Nginx 缓存配置、SSL/TLS 配置)
目录 Nginx 缓存配置 SSL/TLS 配置 Nginx 缓存配置 概念:Nginx 缓存配置允许服务器将频繁访问的资源(如网页、图片、脚本等)存储在内存或磁盘中,当再次接收到相同请求时,直接从缓存中读取并返回,减少对后…...
JavaScript——前端基础3
目录 JavaScript简介 优点 可做的事情 运行 第一个JavaScript程序 搭建开发环境 安装的软件 操作 在浏览器中使用JavaScript文件 分离JS 使用node运行JS文件 语法 变量与常量 原生数据类型 模板字符串 字符串的内置方法 数组 对象 对象数组和JSON if条件语…...