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()}]");
        }
    }
}
相关推荐
朝新_几秒前
【多线程初阶】阻塞队列 & 生产者消费者模型
java·开发语言·javaee
立莹Sir3 分钟前
Calendar类日期设置进位问题
java·开发语言
CoderIsArt25 分钟前
C#中的CLR属性、依赖属性与附加属性
c#
风逸hhh1 小时前
python打卡day46@浙大疏锦行
开发语言·python
火兮明兮1 小时前
Python训练第四十三天
开发语言·python
ascarl20102 小时前
准确--k8s cgroup问题排查
java·开发语言
fpcc3 小时前
跟我学c++中级篇——理解类型推导和C++不同版本的支持
开发语言·c++
莱茵菜苗3 小时前
Python打卡训练营day46——2025.06.06
开发语言·python
爱学习的小道长3 小时前
Python 构建法律DeepSeek RAG
开发语言·python
luojiaao4 小时前
【Python工具开发】k3q_arxml 简单但是非常好用的arxml编辑器,可以称为arxml杀手包
开发语言·python·编辑器