我的MQTT操作类(M2Mqtt.Net)

类本体
4.3.0

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;
            }
        }

连接的应用

 /// <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 });//订阅主题
            }
        }

断开重连:

 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数据接受

/// <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);//数据内容
        }

发送数据

 if (ThisMQTTS.mqttClient != null && ThisMQTTS.mqttClient.IsConnected)
 {
        ThisMQTTS.MQTTMainPublish(GModel.DingyueZhuti, SetToServer);
        OPCommon.LogWrite.WriteLog("数据发送成功:" + SetToServer);
        ChengzhongMainWath.Restart();
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值