基于MQTTnet 3.1组件的MQTT协议应用开发示例(2)

承继上篇文章:基于MQTTnet 3.1组件的MQTT协议应用开发示例(1)

上篇讲到基于MQTTnet的MQTT服务端和客户端搭建,并介绍了客户端登录MQTT服务端建立通信连接的过程。这篇继续介绍消息的订阅、发布等处理。

0、引用对象

using MQTTnet.Client;
using MQTTnet; 
using System; 
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MQTTnet.Client.Options;
using System.Threading;

1、订阅主题

 private async Task Subscribe()
        {
            string topic = txtSubTopic.Text.Trim();

            if (string.IsNullOrEmpty(topic))
            {
                MessageBox.Show("订阅主题不能为空!");
                return;
            }

            if (!mqttClient.IsConnected)
            {
                MessageBox.Show("MQTT客户端尚未连接!");
                return;
            }

            // Subscribe to a topic
            await mqttClient.SubscribeAsync(new TopicFilterBuilder()
                .WithTopic(topic)
                .WithAtMostOnceQoS()
                .Build()
                );
            Invoke((new Action(() =>
            {
                txtReceiveMessage.AppendText($"已订阅[{topic}]主题{Environment.NewLine}");
            })));

        }

2、发布主题

  private async Task Publish()
        {
            string topic = txtPubTopic.Text.Trim();

            if (string.IsNullOrEmpty(topic))
            {
                MessageBox.Show("发布主题不能为空!");
                return;
            }

            string inputString = txtSendMessage.Text.Trim();
            try
            {

                var message = new MqttApplicationMessageBuilder()
                    .WithTopic(topic)
                    .WithPayload(inputString)
                    .WithExactlyOnceQoS()
                    .WithRetainFlag()
                    .Build();

                await mqttClient.PublishAsync(message);
            }
            catch (Exception ex)
            {

                Invoke((new Action(() =>
                {
                    txtReceiveMessage.AppendText($"发布主题失败!" + Environment.NewLine + ex.Message + Environment.NewLine);
                })));
            }
        }

3、退出登录

 private void btnLogout_Click(object sender, EventArgs e)
        {
            isReconnect = false;
            Task.Run(async () => { await mqttClient.DisconnectAsync(); });
            Invoke((new Action(() =>
            {
                txtReceiveMessage.Clear();
                DateTime curTime = new DateTime();
                curTime = DateTime.UtcNow;
                txtReceiveMessage.AppendText($">> [{curTime.ToLongTimeString()}]");
                txtReceiveMessage.AppendText("已断开MQTT连接!" + Environment.NewLine);
            })));
        }

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MQTT3.1 CN指的是MQTT(Message Queuing Telemetry Transport)3.1协议的中国国家标准(Chinese National Standard)版本。 MQTT是一种轻量级的消息传输协议,用于在计算机网络中传输小型数据包。它被设计用于传输远程物联网设备产生的数据,具有低带宽、低功耗和高效率的特点。 MQTT3.1 CN版本是在MQTT3.1基础上进行了本土化改进。通过推出中国国家标准版本,可以更好地适应中国物联网应用的特点和需求。该版本在改进数据协议的同时,还考虑到了网络稳定性和传输效率。 MQTT3.1 CN版本在以下方面进行了优化: 1. 数据协议:通过优化数据包的组织方式和数据字段的定义,提高了数据传输的通用性和灵活性,更好地适应不同类型的物联网设备和应用场景。 2. 安全性:引入了更强大的加密和认证机制,保护数据的传输过程,防止数据泄露和篡改。 3. 网络稳定性:通过采用更可靠的消息传输机制,确保数据在不稳定网络环境下的可靠性和稳定性。 4. 传输效率:通过优化数据包的大小和传输的方式,减少了网络带宽的占用,并提高了数据传输的效率。 MQTT3.1 CN版本将更好地支持中国物联网行业的发展和应用,促进物联网技术的推广和普及。同时,它还将为中国企业和开发者提供一个更好的平台,创新物联网产品和服务,推动产业的升级和创新。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皖山文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值