我的MQTT操作类(M2Mqtt.Net)

类本体

4.3.0

csharp 复制代码
public   class MQTTMain
    {
        public   MqttClient mqttClient =null ; 
        public   bool MQTTMainConnect(string MenZuNo, string ServerIP, int ServerPort, string UserName, string Pwd)
        {
            try
            {
                string EMQX_CLIENT_ID = $"称重端-{MenZuNo}-{OPCommon.PCControl.GetPCInfos.GetMachineName()}";
                mqttClient = new MqttClient(ServerIP, ServerPort, false, null, null, MqttSslProtocols.None);
                mqttClient.Connect(EMQX_CLIENT_ID, UserName, Pwd);//需要录入账号密码
                return true; 
            }
            catch (Exception ex)
            {
                OPCommon.LogWrite.WriteLog("MQTT链接错误,信息是:"+ex.Message);
                return false;

            } 
        }
        /// <summary>
        /// 发布主题
        /// </summary>
        /// <param name="MenZuNo"></param>
        /// <param name="ServerIP"></param>
        /// <param name="ServerPort"></param>
        /// <param name="UserName"></param>
        /// <param name="Pwd"></param>
        /// <returns></returns>
        public   bool MQTTMainPublish(string Zhuti, string MsgInfo )
        {
            try
            {
                mqttClient.Publish(Zhuti, System.Text.Encoding.UTF8.GetBytes(MsgInfo), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
                return true;
            }
            catch (Exception ex)
            {
                OPCommon.LogWrite.WriteLog("MQTT发送错误,信息是:" + ex.Message);
                return false;
            }
        }

连接的应用

csharp 复制代码
 /// <summary>
        /// MQTT链接重新连接
        /// </summary>
        public void ThisMQTTConntect()
        {
            if (ThisMQTTS.mqttClient == null || !ThisMQTTS.mqttClient.IsConnected)
            {
                ThisMQTTS.MQTTMainConnect(GModel.MainSetupAll.BangNo, GModel.MainSetupAll.ServerIp, GModel.MainSetupAll.ServerPort, GModel.MainSetupAll.ServerUser, GModel.MainSetupAll.Pwd);
            }
            if (ThisMQTTS.mqttClient != null && ThisMQTTS.mqttClient.IsConnected)
            {
                ThisMQTTS.mqttClient.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;
                ThisMQTTS.mqttClient.ConnectionClosed += TryReconnectAsync;
                ThisMQTTS.mqttClient.Subscribe(new string[] { GModel.DingyueZhuti }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE });//订阅主题
            }
        }

断开重连:

csharp 复制代码
 private void TryReconnectAsync(object sender, EventArgs ex)
        {
            if (!ThisMQTTS.mqttClient.IsConnected && !IsThisClose)
            {
                OPCommon.LogWrite.WriteLog($"{this.Name}当前断开");
                Thread.Sleep(2000);
                Thread retryThread = new Thread(new ThreadStart(delegate
                {
                    OPCommon.LogWrite.WriteLog($"{this.Name}第一次重连");
                    ThisMQTTConntect();
                    if (!ThisMQTTS.mqttClient.IsConnected)
                    {
                        OPCommon.LogWrite.WriteLog($"{this.Name}第二次重连!");
                        Thread.Sleep(5000);
                        ThisMQTTConntect();
                    }
                    else
                    {
                        OPCommon.LogWrite.WriteLog($"{this.Name}第一次重连成功!");
                    }
                }));
                retryThread.Start();
            } 
        } 

MQTT数据接受

csharp 复制代码
/// <summary>
        ///  MQTT操作
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
        {
            //string topic = e.Topic.ToString();//主题内容
            
            string MsgFromMQTT = System.Text.Encoding.UTF8.GetString(e.Message);//数据内容
        }

发送数据

csharp 复制代码
 if (ThisMQTTS.mqttClient != null && ThisMQTTS.mqttClient.IsConnected)
 {
        ThisMQTTS.MQTTMainPublish(GModel.DingyueZhuti, SetToServer);
        OPCommon.LogWrite.WriteLog("数据发送成功:" + SetToServer);
        ChengzhongMainWath.Restart();
 }
相关推荐
学编程的小程18 分钟前
突破局域网限制:MongoDB远程管理新体验
数据库·mongodb
唐青枫24 分钟前
从入门到进阶:C#.NET Stopwatch 计时与性能测量全攻略
c#·.net
波波烤鸭27 分钟前
Redis 高可用实战源码解析(Sentinel + Cluster 整合应用)
数据库·redis·sentinel
私人珍藏库1 小时前
[Windows] 微软 .Net 运行库离线安装包 | Microsoft .Net Packages AIO_v09.09.25
microsoft·.net·运行库
l1t4 小时前
利用DeepSeek实现服务器客户端模式的DuckDB原型
服务器·c语言·数据库·人工智能·postgresql·协议·duckdb
MarkHard1238 小时前
如何利用redis使用一个滑动窗口限流
数据库·redis·缓存
island131410 小时前
【Redis#10】渐进式遍历 | 数据库管理 | redis_cli | RES
数据库·redis·bootstrap
心想事成的幸运大王10 小时前
Redis的过期策略
数据库·redis·缓存
倔强的石头_10 小时前
CentOS 上安装KingbaseES(ISO包)详细教程
数据库
追逐时光者11 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 54 期(2025年9.8-9.14)
后端·.net