.net c# 基于netcore框架,操作Mqtt。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            //设置默认值
            //服务器相关参数
            txtServerAddress.Text = "127.0.0.1";
            txtPort.Text = "1883";
            txtAccount.Text = "admin";
            txtPassword.Text = "123456";
            //默认订阅主题
            txtSubscribeTopic.Text = "ADD;MOD;DEL";
            //默认广播的主题
            txtPublishTopic.Text = "MOD";
            //默认广播的消息内容
            txtPublishMsg.Text = $"我们左右进攻,形成两面包夹芝士!{ Environment.NewLine }";
        }

        MqttClient client = null;

        private void button1_Click(object sender, EventArgs e)
        {
            //创建客户端实例
            //client = new MqttClient(IPAddress.Parse("127.0.0.1"));//IP

            string ip = txtServerAddress.Text;
            int port = Convert.ToInt32(txtPort.Text);
            string account = txtAccount.Text;
            string password = txtPassword.Text;
            client = new MqttClient(ip, port, false,null,null,MqttSslProtocols.None); //IP
            //MqttClient client = new MqttClient("域名地址");//域名

            //注册消息接收处理事件(主题订阅成功回调函数;取消主题订阅成功回调函数;已断开服务器回调函数等委托事件)
            client.MqttMsgPublishReceived += SubscribeMessageReceived;
            client.MqttMsgSubscribed += SubscribeSucceed;
            client.MqttMsgPublished += PublishSucceed;
            client.MqttMsgUnsubscribed += UnSubscribeSucceed;

            //生成客户端ID并连接服务器
            string clientId = Guid.NewGuid().ToString();
            client.Connect(clientId,account, password);
            LinkStart();
        }

        //订阅消息接收回调函数
        void SubscribeMessageReceived(object sender, MqttMsgPublishEventArgs e)
        {
            string topic = e.Topic;
            string msg = Encoding.Default.GetString(e.Message);
            txtSubscribeMessage.Invoke(new EventHandler(delegate
            {
                txtSubscribeMessage.Text += $" 于{ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") } 收到消息:{ Environment.NewLine } 主题:{ topic + Environment.NewLine } 内容: { msg }";
            }));
        }

        //广播成功回调函数
        void PublishSucceed(object sender, MqttMsgPublishedEventArgs e)
        {
            txtPublishMsg.Invoke(new EventHandler(delegate
            {
                txtPublishMsg.Text += $" { e.MessageId } 于{ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") } 广播完毕。";
            }));
        }

        //订阅主题成功回调函数
        void SubscribeSucceed(object sender, MqttMsgSubscribedEventArgs e)
        {
            try
            {
                string subscribes = txtSubscribeTopic.Text;
                txtSubscribeMessage.Invoke(new EventHandler(delegate
                {
                    this.txtSubscribeMessage.Text += $" {subscribes} 频道订阅成功{ Environment.NewLine }";
                }));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                MessageBox.Show("出现了异常,异常信息已打印在控制台。");
            }
        }

        //取订主题成功回调函数
        void UnSubscribeSucceed(object sender, MqttMsgUnsubscribedEventArgs e)
        {
            try
            {
                string subscribes = txtSubscribeTopic.Text;
                txtSubscribeMessage.Invoke(new EventHandler(delegate
                {
                    this.txtSubscribeMessage.Text += $" {subscribes} 频道取消订阅成功{ Environment.NewLine }";
                }));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                MessageBox.Show("出现了异常,异常信息已打印在控制台。");
            }
        }

        //广播消息
        private void btnPublish_Click(object sender, EventArgs e)
        {
            //Topic Message Qos retain
            string topic = txtPublishTopic.Text;
            string publishMsg = txtPublishMsg.Text;
            if (string.IsNullOrEmpty(topic))
            {
                MessageBox.Show("请填写发布消息的主题");
                txtPublishTopic.Focus();
                return;
            }
            if (string.IsNullOrEmpty(publishMsg))
            {
                MessageBox.Show("请填写发布消息的内容");
                txtPublishTopic.Focus();
                return;
            }
            client.Publish(topic, Encoding.Default.GetBytes(publishMsg),MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE,false);
        }

        //Link Start
        public void LinkStart()
        {
            System.Media.SoundPlayer sp = new System.Media.SoundPlayer();
            sp.SoundLocation = AppDomain.CurrentDomain.BaseDirectory + @"link start part.wav"; //音乐文件
            sp.Play();
            Thread.Sleep(6500);
            txtSubscribeMessage.Invoke(new EventHandler(delegate
            {
                this.txtSubscribeMessage.Text += $" 已成功与服务器建立通信{ Environment.NewLine }";
            }));
        }

        //订阅主题
        private void btnSubscribe_Click(object sender, EventArgs e)
        {
            //订阅主题"ADD", "MOD", "DEL" 消息质量为 1 
            string topicsvalue = txtSubscribeTopic.Text;
            string[] topics = { };
            if (!string.IsNullOrEmpty(topicsvalue))
            {
                if (topicsvalue.IndexOf(";") > -1)
                {
                    topics = topicsvalue.Split(';');
                }
                else
                {
                    topics = new string[] { topicsvalue };
                }
            }
            else
            {
                MessageBox.Show("请填写订阅主题名称");
            }
            byte[] modes = { MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE, MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE, MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE };
            client.Subscribe(topics, modes);
        }

        //取消订阅主题
        private void btnCancel_Click(object sender, EventArgs e)
        {
            string topicsvalue = txtSubscribeTopic.Text;
            string[] topics = { };
            if (!string.IsNullOrEmpty(topicsvalue))
            {
                if (topicsvalue.IndexOf(";") > -1)
                {
                    topics = topicsvalue.Split(';');
                }
                else
                {
                    topics = new string[] { topicsvalue };
                }
            }
            else
            {
                MessageBox.Show("请填写订阅主题名称");
            }
            client.Unsubscribe(topics);
        }
    }
}

完整代码下载地址:WinFormsApp1.rar-互联网文档类资源-CSDN下载

完整代码备用下载地址:http://129.204.119.56:10104/

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值