C#接收/发送MQTT消息,使用C# MqttLib

1 篇文章 0 订阅

MQTT简介

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

MQTT消息有三种质量等级

  1. “至多一次”(QoS==0),消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。

  2. “至少一次”(QoS==1),确保消息到达,但消息重复可能会发生。

  3. “只有一次”(QoS==2),确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。

  • 具体使用还要看消息中间件是否支持3种质量等级

使用 MqttLib 订阅 mqtt消息

  1. 新建C#工程,并引用MqttLib
  2. 实例化 mqtt client
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MqttLib;

using System.Diagnostics;
using System.IO;

namespace mqttlib_mqtt
{
    class Program
    {
        
        IMqtt _client;

        static void Main(string[] args)
        {
            
            string connectionString = "tcp://127.0.0.1:1884";
            string clientId = Guid.NewGuid().ToString();

            Console.WriteLine("正在启动mqtt示例程序");
            Console.WriteLine("按任意键可以退出本程序\n");

            Program prog = new Program(connectionString, clientId);
            prog.Start();

            Console.ReadKey();
            prog.Stop();
        }


        Program(string connectionString, string clientId)
        {
            // 实例化 MqttClientFactor

            _client = MqttClientFactory.CreateClient(connectionString, clientId);

            // 设置客户端回调
            _client.Connected += new ConnectionDelegate(client_Connected);
            _client.ConnectionLost += new ConnectionDelegate(_client_ConnectionLost);
            _client.PublishArrived += new PublishArrivedDelegate(client_PublishArrived);
        }

        void Start()
        {
            // 使用 'CleanStart' 模式启动连接
            Console.WriteLine("连接mqtt服务器\n");
            _client.Connect(true);
        }

        void Stop()
        {
            if (_client.IsConnected)
            {
                Console.WriteLine("客户端断开\n");
                _client.Disconnect();
                Console.WriteLine("客户端已经断开连接\n");
            }
        }

        void client_Connected(object sender, EventArgs e)
        {
            Console.WriteLine("客户端已经连接\n");
            RegisterOurSubscriptions();
            PublishSomething();
        }

        void _client_ConnectionLost(object sender, EventArgs e)
        {
            Console.WriteLine("连接异常断开\n");
        }

        // 注册 Topic
        void RegisterOurSubscriptions()
        {
            Console.WriteLine("订阅mqtt Topic:mqtt/test/res/#\n");
            _client.Subscribe("mqtt/test/res/#", QoS.AtLeastOnce);
        }

        // 发布 mqtt 消息
        void PublishSomething()
        {
            Console.WriteLine("发布mqtt消息到:mqtt/test/res\n");
            // 设置Topic,要发送的消息,消息等级
            _client.Publish("mqtt/test/res", "测试数据", QoS.AtLeastOnce, false);
        }

        // 处理收到的 mqtt 消息
        bool client_PublishArrived(object sender, PublishArrivedArgs e)
        {
            Console.WriteLine("收到的消息:");
            Console.WriteLine("Topic: " + e.Topic);
            Console.WriteLine("Payload: " + e.Payload);
            Console.WriteLine();
            return true;
        }

        
    }
}

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安心写bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值