C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > c# MQTT应用

c#中MQTT应用的实现

作者:科学的发展-只不过是读大自然写的代码

本文主要介绍了c#中MQTT应用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1.MQTT 应用举例 c#

在 C# 中应用 MQTT 协议,目前最主流、功能最全且维护活跃的库是 MQTTnet。它支持 .NET Standard 2.0+(包括 .NET Core, .NET 5/6/7/8+ 以及 .NET Framework 4.6.1+),适用于桌面应用、服务端、移动端(Xamarin/MAUI)等多种场景。

以下是一个完整的 C# MQTT 应用举例,包含:

✅ 步骤 1:安装 MQTTnet NuGet 包

在 Visual Studio 中通过 NuGet 包管理器安装,或使用命令行:

dotnet add package MQTTnet 

或在 .csproj 文件中添加:

<PackageReference Include="MQTTnet" Version="4.3.7.1204" /> 

💡 截至 2026 年,推荐使用 4.x 版本(稳定且支持 MQTT 5.0)。

✅ 步骤 2:完整示例代码(控制台应用)

using System;
using System.Text;
using System.Threading.Tasks;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Protocol;
class Program
{
    static async Task Main(string[] args)
    {
        // 创建 MQTT 客户端工厂
        var factory = new MqttFactory();
        using var mqttClient = factory.CreateMqttClient();
        // 配置连接选项
        var options = new MqttClientOptionsBuilder()
            .WithClientId("CSharp_Client_" + Guid.NewGuid().ToString("N")[..8])
            .WithTcpServer("broker.hivemq.com", 1883) // 公共测试 Broker,无需认证
            // 如果需要账号密码:
            // .WithCredentials("username", "password")
            // 如果使用 TLS:
            // .WithTls(new MqttClientOptionsBuilderTlsParameters()
            // {
            //     SslProtocol = System.Security.Authentication.SslProtocols.Tls12,
            //     UseTls = true
            // })
            .WithCleanSession() // 非持久会话
            .Build();
        // 注册消息接收事件
        mqttClient.ApplicationMessageReceivedAsync += e =>
        {
            var topic = e.ApplicationMessage.Topic;
            var payload = Encoding.UTF8.GetString(e.ApplicationMessage.PayloadSegment.ToArray());
            var qos = e.ApplicationMessage.QualityOfServiceLevel;
            Console.WriteLine($"[收到消息] 主题: {topic} | 内容: {payload} | QoS: {qos}");
            return Task.CompletedTask;
        };
        // 注册连接状态变化事件(可选)
        mqttClient.ConnectedAsync += e =>
        {
            Console.WriteLine("✅ 已成功连接到 MQTT Broker");
            return Task.CompletedTask;
        };
        mqttClient.DisconnectedAsync += e =>
        {
            Console.WriteLine("❌ 已断开连接");
            return Task.CompletedTask;
        };
        try
        {
            // 连接 Broker
            Console.WriteLine("正在连接 MQTT Broker...");
            await mqttClient.ConnectAsync(options);
            // 订阅主题(支持通配符 + 和 #)
            await mqttClient.SubscribeAsync("test/topic");
            await mqttClient.SubscribeAsync("home/+/temperature"); // 例如:home/livingroom/temperature
            Console.WriteLine("📬 已订阅主题: test/topic, home/+/temperature");
            // 发布消息
            var message = new MqttApplicationMessageBuilder()
                .WithTopic("test/topic")
                .WithPayload("Hello from C# MQTT Client! 🚀")
                .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce)
                .WithRetainFlag(false)
                .Build();
            Console.WriteLine("📤 正在发布消息...");
            await mqttClient.PublishAsync(message);
            // 保持运行以接收消息(实际应用中可用 CancellationToken 或用户输入控制)
            Console.WriteLine("按任意键退出...");
            Console.ReadKey();
            // 断开连接
            await mqttClient.DisconnectAsync();
        }
        catch (Exception ex)
        {
            Console.WriteLine($"❌ 发生错误: {ex.Message}");
        }
    }
}

🔍 关键点说明

功能说明
Broker 地址示例使用 broker.hivemq.com:1883(公开测试,生产环境请自建或使用阿里云/EMQX/AWS IoT 等)
QoS 等级AtMostOnce(0), AtLeastOnce(1), ExactlyOnce(2) —— 根据可靠性需求选择
主题通配符+ 匹配单层,# 匹配多层(如 home/# 匹配所有子主题)
异步编程全程使用 async/await,避免阻塞 UI 线程(适合 WinForms/WPF/MAUI)
TLS 加密生产环境务必启用 TLS(端口通常为 8883)

🏠 实际应用场景举例

  1. 智能家居控制

    • 设备发布:home/livingroom/light/status → "ON"
    • 手机 App 订阅该主题并更新 UI,或发布 home/livingroom/light/command → "OFF"
  2. 工业传感器数据上报

    • PLC 每隔 5 秒发布:factory/machine01/temperature → {"value": 42.5, "unit": "°C"}
    • C# 服务端订阅并写入数据库或触发告警
  3. 远程命令下发

    • 云端发布:device/DEVICE_ID/reboot
    • 嵌入式设备(通过 C# 网关代理)订阅并执行重启

📦 扩展建议

如需针对特定场景(如 WinForms 界面更新、ASP.NET Core 后台服务、阿里云 IoT 对接)的示例,我可以进一步提供详细代码模板。

2.MQTT

MQTT (Message Queuing Telemetry Transport) 是一种基于**发布/订阅(Publish/Subscribe)**模式的轻量级消息传输协议,专为物联网(IoT)、移动设备和低带宽、高延迟或不稳定的网络环境设计。

截至 2026年,随着人工智能与物联网(AIoT)的深度融合,MQTT协议在技术演进和应用场景上都有了显著的新发展。以下是关于MQTT的核心概念、2026年的最新技术趋势及典型应用场景:

1. 核心特点

2. 2026年技术新趋势与突破

根据最新的行业报告和技术动态,2026年的MQTT协议正经历从“消息传输工具”向“实时智能数据中枢”的转型:

🚀 传输层革新:MQTT over QUIC

📁 原生文件传输支持

🤖 AI与物联网融合 (AIoT)

⚡ 性能优化特性

3. 典型应用场景

4. 常用组件与生态

总结

在2026年,MQTT凭借其轻量化、高可靠、低延迟的特性,结合QUIC传输层优化AI融合能力,已稳固确立为物联网通信的基石协议。它不仅解决了传统网络环境下的通信难题,更在车联网、智能制造和智慧城市等高要求场景中发挥着不可替代的作用。

3.MQTT 应用举例

MQTT 的应用非常广泛,从简单的家庭自动化到复杂的工业控制系统都能看到它的身影。为了让你更直观地理解,我将通过4个不同领域的具体场景来举例,并展示其数据流向代码逻辑

场景一:智能家居 —— 远程灯光控制与状态同步

这是最经典的例子,展示了 MQTT 的发布/订阅模式和**保留消息(Retained Message)**特性。

核心价值:解耦控制端和设备端;利用保留消息解决设备上线后的状态同步问题。

场景二:车联网 (IoV) —— 车辆实时数据上报与监控

这个场景展示了 MQTT 在高并发、弱网环境下的优势,以及遗嘱消息 (Last Will) 的应用。

核心价值:处理海量并发连接;利用遗嘱机制实现毫秒级的设备掉线感知,保障安全。
注:2026年的新车联网方案多采用 MQTT over QUIC,以应对高速移动中的网络切换。

场景三:工业物联网 (IIoT) —— 预测性维护

展示了 QoS (服务质量) 的选择和层级主题的使用。

核心价值:灵活选择 QoS 平衡可靠性与性能;利用通配符 + 和 # 实现灵活的数据聚合。

场景四:即时通讯 (IM) —— 移动端消息推送

展示了 MQTT 在移动网络省电和低功耗方面的优势。

核心价值:比 HTTP 轮询更省电;比 WebSocket 更轻量,适合大规模移动端用户。

代码示例 (Python)

这是一个简单的模拟:一个传感器发布温度,一个监控程序订阅并打印。

安装库: pip install paho-mqtt

1. 发布者 (模拟传感器)

import paho.mqtt.client as mqtt
import time
import random
BROKER = "broker.emqx.io" # 公共测试 Broker
TOPIC = "demo/temp/sensor_01"
def on_connect(client, userdata, flags, rc):
    print(f"Connected with result code {rc}")
client = mqtt.Client()
client.on_connect = on_connect
client.connect(BROKER, 1883, 60)
while True:
    temp = round(random.uniform(20.0, 30.0), 2)
    # 发布消息,QoS=1
    info = client.publish(TOPIC, f"{temp}", qos=1)
    info.wait_for_publish()
    print(f"Published: {temp}°C to {TOPIC}")
    time.sleep(2)

2. 订阅者 (监控中心)

import paho.mqtt.client as mqtt
BROKER = "broker.emqx.io"
TOPIC = "demo/temp/#" # 使用通配符订阅该目录下所有传感器
def on_connect(client, userdata, flags, rc):
    print("Connected! Subscribing...")
    client.subscribe(TOPIC)
def on_message(client, userdata, msg):
    print(f"Received: [{msg.topic}] {msg.payload.decode()}")
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER, 1883, 60)
client.loop_forever() # 阻塞循环,持续监听

总结

这些例子展示了 MQTT 如何通过灵活的配置适应从几块钱的传感器到价值百万的自动驾驶汽车的各种需求。

4.物联网通讯协议都有什么

物联网(IoT)通讯协议种类繁多,通常根据传输距离功耗带宽以及应用场景的不同,分为不同的层级和类别。

截至2026年,主流的物联网通讯协议主要可以分为以下几大类:

1. 应用层协议 (数据交换与消息传输)

这些协议运行在现有的网络连接(如Wi-Fi、蜂窝网)之上,主要负责设备与云端、或设备与设备之间的数据格式和传输规则。

2. 短距离无线通讯协议 (局域网/个人区域网)

主要用于设备与网关、或设备与手机之间的近距离连接。

3. 长距离低功耗广域网 (LPWAN)

专为广覆盖、低功耗、小数据量的场景设计,是蜂窝物联网和非蜂窝物联网的主战场。

A. 蜂窝物联网 (授权频谱,运营商部署)

B. 非蜂窝物联网 (非授权频谱,自建网络)

4. 工业与有线协议

在工业物联网(IIoT)中,有线连接依然至关重要,以保证稳定性和实时性。

总结与选型建议 (2026视角)

需求场景推荐协议组合
智能家居 (消费级)Matter (应用层) + Wi-Fi 7 / Thread / BLE (底层)
低功耗传感器 (广覆盖)NB-IoT (城市/运营商覆盖) 或 LoRaWAN (园区/私有部署)
工业控制/实时性5G RedCap / 5G-Advanced (无线) 或 OPC UA over TSN (有线)
海量数据/视频流5G / Wi-Fi 7 + MQTT / HTTP
设备管理与运维LwM2M
AIoT边缘协同MQTT over QUIC + DDS

2026年的显著特点是协议的融合与智能化:底层硬件往往支持多模(如同时支持BLE+Wi-Fi+Thread),而应用层则通过MQTTMatter实现跨平台互通,同时引入AI优化网络拥塞控制和能耗管理。

到此这篇关于c#中MQTT应用的实现的文章就介绍到这了,更多相关c# MQTT应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文