分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

MqttNet 通讯

发布时间:2023-09-06 02:18责任编辑:林大明关键词:暂无标签

MQTT,IBM发明的物联网通讯协议基于tcp ip , 收集传感器上的数据。

下图理解:  broker 这里有很多消息,根据主题不同来进行区分,它这里可以保管所有连过来的客户端的数据,然后客户端,通过订阅broker它有的主题进行获取数据。

学习网址:https://github.com/chkr1011/MQTTnet/wiki/Client

broker网址 代理:http://www.mqtt-dashboard.com/   

开发(只需客户端):

vs2015

1.添加引用本文MQTTnet2.8.4(管理NuGet程序包)

2.界面

3.代码

using MQTTnet;using MQTTnet.Client;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace server{ ???public partial class Form1 : Form ???{ ???????public Form1() ???????{ ???????????InitializeComponent(); ???????} ???????public static IMqttClient mqttClient = null; ???????public static IMqttClientOptions options = null; ???????private void Form1_Load(object sender, EventArgs e) ???????{ ???????????//实例化对象 ???????????var factory = new MqttFactory(); ???????????mqttClient = factory.CreateMqttClient(); ???????????mqttClient.Connected += SubscribeTopic; ???????????mqttClient.Disconnected += MqttClient_Disconnected; ???????????mqttClient.ApplicationMessageReceived += Receive; ???????????//配置参数 ???????????//options = new MqttClientOptionsBuilder() ???????????// ???.WithClientId(Guid.NewGuid().ToString().Substring(0, 5)) ???????????// ???.WithTcpServer("broker.hivemq.com") ???????????// ???.WithCredentials("bud", "%spencer%") ???????????// ???.WithTls() ???????????// ???.WithCleanSession() ???????????// ???.Build(); ???????????options = new MqttClientOptionsBuilder().WithWebSocketServer("broker.hivemq.com:8000/mqtt").Build(); ???????????//连接 ???????????Task.Run(async () => { await ConnectMqtt(); }); ???????} ???????public async Task ConnectMqtt() ???????{ ???????????try ???????????{ ???????????????MqttClientConnectResult x = await mqttClient.ConnectAsync(options); ???????????} ???????????catch (Exception ex) ???????????{ ???????????????Invoke((new Action(() => ???????????????{ ???????????????????textBox2.Text = $"连接到MQTT服务器失败!" + Environment.NewLine + ex.Message + Environment.NewLine; ???????????????}))); ???????????} ???????} ???????//接收消息 ???????public async void Receive(object sender, MqttApplicationMessageReceivedEventArgs e) ???????{ ???????????try ???????????{ ???????????????Invoke((new Action(() => ???????????????{ ???????????????????//textBox2.AppendText("### RECEIVED APPLICATION MESSAGE 接收消息 ###"); ???????????????????textBox2.AppendText($"Topica(主题) = {e.ApplicationMessage.Topic}" + "\t\n"); ???????????????????textBox2.AppendText($"Payloada(内容) = {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}" + "\t\n"); ???????????????????//textBox2.AppendText($"+ QoS = {e.ApplicationMessage.QualityOfServiceLevel}"); ???????????????????//textBox2.AppendText($"+ Retain = {e.ApplicationMessage.Retain}"); ???????????????}))); ???????????} ???????????catch (Exception ex) ???????????{ ???????????????Invoke((new Action(() => ???????????????{ ???????????????????textBox2.Text = ex.Message; ???????????????}))); ???????????} ???????} ???????//连接成功 ???????public async void SubscribeTopic(object sender, EventArgs e) ???????{ ???????????Invoke((new Action(() => { label2.Text = "连接成功"; }))); ???????} ???????????????/// <summary> ???????/// 连接失败 ???????/// </summary> ???????/// <param name="sender"></param> ???????/// <param name="e"></param> ???????public async void MqttClient_Disconnected(object sender, EventArgs e) ???????{ ???????????Invoke((new Action(() => ???????????{ ???????????????textBox2.AppendText("连接失败!" + Environment.NewLine); ???????????}))); ???????????//重新连接 ???????????await Task.Delay(TimeSpan.FromSeconds(3)); ???????????try ???????????{ ???????????????await mqttClient.ConnectAsync(options); ???????????????Invoke((new Action(() => ???????????????{ ???????????????????textBox2.AppendText("连接成功!"); ???????????????}))); ???????????} ???????????catch ???????????{ ???????????????Invoke((new Action(() => ???????????????{ ???????????????????textBox2.AppendText("连接失败!"); ???????????????}))); ???????????} ???????} ???????/// <summary> ???????/// 订阅消息 ???????/// </summary> ???????/// <param name="sender"></param> ???????/// <param name="e"></param> ???????private void button1_Click(object sender, EventArgs e) ???????{ ???????????string topic = textBox1.Text; ???????????mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic(topic).Build()); ???????????textBox2.AppendText("### 订阅" + topic + "成功 ###\t\n"); ???????} ???????/// <summary> ???????/// 释放资源 ???????/// </summary> ???????/// <param name="sender"></param> ???????/// <param name="e"></param> ???????private void button2_Click(object sender, EventArgs e) ???????{ ???????????mqttClient.Dispose(); ???????????textBox2.AppendText("### 断开连接###\t\n"); ???????} ???????/// <summary> ???????/// 发布一个主题内容 ???????/// </summary> ???????/// <param name="sender"></param> ???????/// <param name="e"></param> ???????private void button3_Click(object sender, EventArgs e) ???????{ ???????????var message = new MqttApplicationMessageBuilder() ???????????????.WithTopic(textBox3.Text) ???????????????.WithPayload(textBox4.Text) ???????????????.WithExactlyOnceQoS() ???????????????.WithRetainFlag() ???????????????.Build(); ????????????mqttClient.PublishAsync(message); ???????} ???}}

4.运行效果

  这些数据就是根据你的主题从http://www.mqtt-dashboard.com/   代理取来,你也可以发布主题的内容,别人也可以订阅你的主题,取数据。

MqttNet 通讯

原文地址:https://www.cnblogs.com/Evan-Pei/p/9816545.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved