C#使用HslCommunication程序库快速创建MQTT客户端,实现连接、订阅主题、发送信息

说明: HslCommunication 这个通讯库是非常强大的,其稳定性非常可靠,虽然对于我个人来说在某些功能上配和项目还不算超级完美,但是够用 这个库可以在网上下载。

下面是MQTT客户端的完整的代码

cs 复制代码
using HslCommunication;
using HslCommunication.MQTT;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        void Main(string[] args)
        {
            try
            {
                string clientId = "AB";
                string ip = "192.168.0.118";
                int port = 1883;
                string Topic = "TTY";
                if (mqttClient != null) mqttClient.ConnectClose();

                Connect(ip, port, "admin", "123456");
                SubscribeMessage(Topic);
                PublishMessage(Topic, "Hello");
            }
            catch (Exception err)
            {
          
            }

            Console.ReadKey();

        }


        static MqttClient mqttClient;

        /// <summary>
        /// 连接
        /// </summary>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        /// <param name="name"></param>
        /// <param name="pwd"></param>
        /// <param name="clientId"></param>
        public void Connect(string ip, int port, string name , string pwd , string clientId = "ClientId")
        {
            try
            {
                if (mqttClient != null) mqttClient.ConnectClose();

                mqttClient = new MqttClient(new MqttConnectionOptions()
                {
                    ClientId = clientId,
                    IpAddress = ip,
                    Port = port,
                    Credentials = new MqttCredential(name, pwd),   // 设置了用户名和密码
                });

                OperateResult connect = mqttClient.ConnectServer();
                if (connect.IsSuccess)
                {
                    Console.WriteLine("连接Mqtt服务器成功");
                }
                else
                {
                    Console.WriteLine("连接Mqtt服务器失败");
                }
            }
            catch (Exception err)
            {
                Console.WriteLine($"连接Mqtt服务器失败[{err.Message}]");
            }


        }

        /// <summary>
        /// 发布信息
        /// </summary>
        /// <param name="topic"></param>
        public void PublishMessage(string topic, string Message)
        {
            try
            {
                mqttClient.PublishMessage(new MqttApplicationMessage()
                {
                    Topic = topic,                                                      // 主题
                    QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce,     // 消息等级
                    Payload = Encoding.UTF8.GetBytes(Message),        // 数据
                    Retain = false,                                                   // 是否保留
                });
            }
            catch (Exception err)
            {
                Console.WriteLine($"订阅失败[{err.Message}]");
            }
        }

        /// <summary>
        /// 订阅主题
        /// </summary>
        /// <param name="topic"></param>
        public  void SubscribeMessage(string Topic)
        {
            try
            {
                mqttClient.OnMqttMessageReceived += MqttClient_OnMqttMessageReceived; // 调用一次即可
                OperateResult Result = mqttClient.SubscribeMessage(Topic);     // 订阅A的主题
                if (Result.IsSuccess)
                {
                    Console.WriteLine($"订阅成功[{Topic}]");
                }
                else
                {
                    Console.WriteLine($"订阅失败[{Topic}]");
                }
            }
            catch (Exception err)
            {
                Console.WriteLine($"订阅失败[{err.Message}]");
            }
        }

        private static void MqttClient_OnMqttMessageReceived(MqttClient client, MqttApplicationMessage message)
        {
            Console.WriteLine($"收到服务器信息[{ message.ToString()}]");
        }
    }
}
相关推荐
weixin_462446237 小时前
EasyExcel 动态修改模板 Sheet 名称:自定义 SheetWriteHandler 拦截器
java·开发语言·easyexcel
绝世唐门三哥8 小时前
使用Intersection Observer js实现超出视口固定底部按钮
开发语言·前端·javascript
Ayu阿予8 小时前
C++从源文件到可执行文件的过程
开发语言·c++
C++业余爱好者8 小时前
JVM优化入门指南:JVM垃圾收集器(GC)介绍
java·开发语言·jvm
福尔摩斯张8 小时前
基于C++的UDP网络通信系统设计与实现
linux·c语言·开发语言·网络·c++·tcp/ip·udp
Trouvaille ~8 小时前
【Java篇】基石与蓝图::Object 类与抽象类的双重奏
java·开发语言·javase·抽象类·类与对象·基础入门·object类
卜锦元8 小时前
Golang中make()和new()的区别与作用?
开发语言·后端·golang
Light608 小时前
破局“数据孤岛”:构建业务、财务、指标三位一体的智能数据模型
java·大数据·开发语言
guygg888 小时前
基于Matlab的压缩感知信道估计算法实现
开发语言·算法·matlab
IMPYLH8 小时前
Lua 的 warn 函数
java·开发语言·笔记·junit·lua