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. ACM暑假培训宣讲稿

    (鞠躬)感谢大家的掌声! 我上台来作这次的宣讲,首先要感谢大家的捧场(当然,这是一句玩笑话),其实吧,我要感谢一下我们ACM班老大(班长),hjh队友,是他指派我来的,给了我这个宝贵的机会.最要感谢的 ...

  2. 将windows上面的项目拷贝到Linux环境下报错不能够找到对应的表com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'puyang.ServiceType' doesn't exist

    将一模一样的项目从win迁移到到linux上报错: 一开始还是以为是linux不能识别hql语句,查找资料发现是因为Liunx服务器上mysql是区分大小写的,而本地是不区分的如:代码是这样写的 @E ...

  3. CentOS 7 下 ifconfig command not found 解决办法

    1.查看ifconfig命令是否存在 查看 /sbin/ifconfig是否存在 2.如果ifconfig命令存在,查看环境变量设置 [root@localhost ~]# echo $PATH 如果 ...

  4. windows10最实用的快捷键、高效的windows模式

    win+方向键 将软件窗口放置到方向 ctrl+win+左右方向键 切换虚拟桌面 win+tab 选择窗口或虚拟桌面,然后按着win随后放开,界面停留 alt+tab 切换窗口 ctrl+win+D ...

  5. iOS Programming Recipe 6: Creating a custom UIView using a Nib

    iOS Programming Recipe 6: Creating a custom UIView using a Nib JANUARY 7, 2013 BY MIKETT 12 COMMENTS ...

  6. WCF 学习笔记

    Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架.借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点.服务终结点 ...

  7. python读取pop3服务器邮件并且下载

    # -*- coding: cp936 -*- import poplib import random import os def getmail(): # 蒋辉文拥有该程序权利 你可以随意使用 em ...

  8. Vue.js的库,包,资源的列表大全。

    官方资源 外部资源 社区 播客 官方示例 入门 开发工具 语法高亮 代码片段 自动补全 组件集合 库和插件 路由 ajax/数据 状态管理 校验 UI组件 i18n 示例 模板 脚手架 整合 插件/指 ...

  9. imagelist用法

    1.添加一个Imagelist控件,并双击控件图标如下图 2.点击新增按钮

  10. 按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式

    按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式 之前写过一篇文章<按照已有的模板输出一(如发票)>,是关于如何给已有的模板赋值.在项目的实践过程 ...