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()}]");
        }
    }
}
相关推荐
2351610 分钟前
【并发编程】详解volatile
java·开发语言·jvm·分布式·后端·并发编程·原理
Algebraaaaa44 分钟前
Qt中的字符串宏 | 编译期检查和运行期检查 | Qt信号与槽connect写法
开发语言·c++·qt
Red Car44 分钟前
javascript 性能优化实例一则
开发语言·javascript·ecmascript
友友马1 小时前
『 QT 』Hello World控件实现指南
开发语言·qt
一只学java的小汉堡1 小时前
Java 面试高频题:HashMap 与 ConcurrentHashMap 深度解析(含 JDK1.8 优化与线程安全原理)
java·开发语言·面试
huohaiyu2 小时前
Hashtable,HashMap,ConcurrentHashMap之间的区别
java·开发语言·多线程·哈希
Predestination王瀞潞6 小时前
IO操作(Num22)
开发语言·c++
宋恩淇要努力7 小时前
C++继承
开发语言·c++
沿着路走到底8 小时前
python 基础
开发语言·python
沐知全栈开发9 小时前
C# 委托(Delegate)
开发语言