标签:raw cti gets das creat windows lag coding websocket
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/ 代理取来,你也可以发布主题的内容,别人也可以订阅你的主题,取数据。
标签:raw cti gets das creat windows lag coding websocket
原文地址:https://www.cnblogs.com/Evan-Pei/p/9816545.html