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());
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 通讯的更多相关文章

  1. IOT设备通讯,MQTT物联网协议,MQTTnet

    一.IOT设备的特性 硬件能力差(存储能力基本只有几MB,CPU频率低连使用HTTP请求都很奢侈) 系统千差万别(Brillo,mbedOS,RIOT等) 如使用电池供电,电量消耗敏感 如果是小设备, ...

  2. 快速搭建MQTT服务器(MQTTnet和Apache Apollo)

    前言 MQTT协议是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分,http://mqtt.org/. MQTT is a machine-to-machine (M2M)/" ...

  3. 使用 MQTTnet 快速实现 MQTT 通信

    1 什么是 MQTT ? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,有可能成为物联网的重要组成部分.MQT ...

  4. MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)

    https://blog.csdn.net/panwen1111/article/details/79245161 目录MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整De ...

  5. HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

    最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的 ...

  6. (转)利用libcurl和国内著名的两个物联网云端通讯的例程, ubuntu和openwrt下调试成功(四)

    1. libcurl 的参考文档如下 CURLOPT_HEADERFUNCTION Pass a pointer to a function that matches the following pr ...

  7. (转)linux下和云端通讯的例程, ubuntu和openwrt下实验成功(二)

    前言: 上节用纯linux的函数实现了和云端通讯, 本节开始利用传说中的神器libcurl 话说一个网络程序员对书法十分感兴趣,退休后决定在这方面有所建树. 于是花重金购买了上等的文房四宝.    一 ...

  8. (转)linux下和云端通讯的例程, ubuntu和openwrt实验成功(一)

    一.  HTTP请求的数据流总结#上传数据, yeelink的数据流如下POST /v1.0/device/4420/sensor/9089/datapoints HTTP/1.1Host: api. ...

  9. 用SignalR 2.0开发客服系统[系列1:实现群发通讯]

    前言 交流群:195866844 先说一下我为什么会写这个博客吧,(首先说一下,我是一个小菜鸟,讲的不好请指导 - -,)  前段时间公司的项目涉及到在B/S上使用即时通讯,(其实就是做一个B/S的客 ...

随机推荐

  1. Generated by NetworkManager、ubuntu DNS设置丢失(network-manager造成的情况)

    方法一:去掉重启 方法二:卸载network-manager 实测网络不稳,经常掉线(kalinux2.0环境)

  2. HALCON机器视觉软件

    HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛的机器视觉集成开发环境.它节约了产品成本,缩短了软件开发周期——HALCON灵活的架构便于机器视觉,医学图像和图像分析 ...

  3. SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)

    一.spring cloud简介 鉴于<史上最简单的Spring Cloud教程>很受读者欢迎,再次我特意升级了一下版本,目前支持的版本为Spring Boot版本2.0.3.RELEAS ...

  4. XJOI 3605 考完吃糖(DAG图dfs)

    题目描述: 期末考试考完了,分数也出来了,大家准备吃糖庆祝一下,为了鼓励同学们下学期能取得更好的成绩,司马红豆同学让n个同学站成一排,如果某个同学的分数比相邻的一个同学要高,那么他得到的糖果就会比这个 ...

  5. js 操作cookie cookie路径问题

    这里主要不是讲这个方法,js写cookie这种代码网上一抓一把,在使用的时候遇到一点问题,就是写的cookie 是有路径问题的,在user目录下可以使用跳转到另外一个目录下cookie,经过比较coo ...

  6. CLion编译的exe文件无法在windows下正常运行

    The program cannot start because libgcc_s_dw2-1.dll is missing from your computer. Try reinstalling ...

  7. Backup--清理MSDB中的备份记录

    每次数据库备份或日志备份,都会向msdb中多多张表插入数据,如果备份比较频繁的话,需要定期清理. 使用sp_delete_backuphistory来清理以下表中数据: backupfile back ...

  8. SSL证书 .pem转.pfx

    使用OpenSSL来进行转换 OpenSSL官网没有提供windows版本的安装包,可以选择其他开源平台提供的工具.例如 http://slproweb.com/products/Win32OpenS ...

  9. Linux 下面screen命令的用法

            最近在使用阿里云的Linux 云服务做毕业设计遇到一些问题,我把java的jar运行程序上传之后,使用java -jar server命令之后程序开始正常运行,但是当我关闭终端的时候程 ...

  10. Jenkins安装笔记

    自动化架构搭建过程中为实现当开发源码更新时自动化脚本同步触发自动执行,使用到持续集成工具Jenikins. Jenikins官网资料: 官方网站:http://jenkins-ci.org/ 插件下载 ...