-
2019-07-16 12:07:45
1.MQTTnet开源库,https://github.com/chkr1011/MQTTnet
MQTTnet.dll 2.8.5 下载
链接:https://pan.baidu.com/s/1BjQ41vOqQ6-JoY06m2uN4Q
提取码:a18s
(此版本示例:https://download.csdn.net/download/uaime/11359429 我尝试升级版本,很多方法不支持,没耐心看文档)知识点(关于MQTT的详细说明 http://x5zj.com/?p=42)
2.服务器端和客户端(看上实例下载)
服务器端和客户端两个,他们需要保持长连接,主要是通过订阅和发布来进行消息的传递交换。
MQTT 服务端主要用于与多个客户端保持连接,并处理客户端的发布和订阅等逻辑。一般很少直接从服务端发送消息给客户端(可以使用
mqttServer.Publish(appMsg);
直接发送消息),多数情况下服务端都是转发主题匹配的客户端消息,在系统中起到一个中介的作用。而客户端主要是通过向服务端订阅它感兴趣(主题)的消息,另一些客户端向服务端发布(主题)消息,服务端将订阅和发布的主题进行匹配,并将消息转发给匹配通过的客户端。
3连接,通信
(1)服务器端启动服务:
public static IMqttServer mqttServer = null; //创建对象
// 配置一个mqtt服务.
var optionsBuilder = new MqttServerOptionsBuilder()
//连接记录数,默认 一般为2000
.WithConnectionBacklog(2000)
//服务器连接端口
.WithDefaultEndpointPort(port)
//连接验证器
.WithConnectionValidator(ValidatingMqttClients())
//持续会话
.WithPersistentSessions();
// 建立一个MQTT服务.
mqttServer = new MqttFactory().CreateMqttServer();
mqttServer.ApplicationMessageReceived += MqttServer_ApplicationMessageReceived;
mqttServer.ClientSubscribedTopic += MqttServer_ClientSubscribedTopic;
mqttServer.ClientUnsubscribedTopic += MqttServer_ClientUnsubscribedTopic;
mqttServer.ClientConnected += MqttServer_ClientConnected;
mqttServer.ClientDisconnected += MqttServer_ClientDisconnected;//启动mqtt服务
await Task.Run(async () => { await mqttServer.StartAsync(optionsBuilder.Build()); });(2)客户端
与服务器端连接
连接语句:
private IMqttClient mqttClient = null; //客户端对象
//实例化 创建客户端对象
var Factory = new MqttFactory();
mqttClient = Factory.CreateMqttClient();
mqttClient.ApplicationMessageReceived += MqttClient_ApplicationMessageReceived;
mqttClient.Connected += MqttClient_Connected;
mqttClient.Disconnected += MqttClient_Disconnected;//调用异步方法连接到服务端
await mqttClient.ConnectAsync(option());
option的信息设置:
public IMqttClientOptions option()
{
//连接到服务器前,获取所需要的MqttClientTcpOptions 对象的信息
var options = new MqttClientOptionsBuilder()
.WithClientId(ClientId) // clientid是设备id
.WithTcpServer(IP, Port) //onenet ip:183.230.40.39 port:6002
.WithCredentials(UserName,pwd) //username为产品id 密码为鉴权信息或者APIkey
//.WithTls()//服务器端没有启用加密协议,这里用tls的会提示协议异常
.WithCleanSession(false)
.WithKeepAlivePeriod(TimeSpan.FromSeconds(2000))
.Build();
return options;
}服务端支持
ClientConnected
、ClientDisconnected
和ApplicationMessageReceived
事件,分别用来检查客户端连接、客户端断开以及接收客户端发来的消息。客户端支持
Connected
、Disconnected
和ApplicationMessageReceived
事件,用来处理客户端与服务端连接、客户端从服务端断开以及客户端收到消息的事情。通过 mqtt接入onenet,其实也就是把onenet 平台当做mqtt broker,连接上稍作改变就可以了。
客户端(接收服务推送)封装类参考:
MQQT服务的源码,下载源码地址:https://github.com/mqtt/mqtt.github.io/wiki/libraries
public class MqttClientService { private static volatile MqttClientService _instance = null; private static readonly object LockHelper = new object(); /// <summary> /// 创建单例模式 /// </summary> /// <param name="ipAddress"></param> /// <returns></returns> public static MqttClientService CreateInstance(string ipAddress) { if (_instance == null) { lock (LockHelper) { if (_instance == null) _instance = new MqttClientService(ipAddress); } } return _instance; } /// <summary> /// 实例化订阅客户端 /// </summary> public MqttClient SubscribeClient { get; set; } public Action<Object, MqttMsgPublishEventArgs> ClientPublishReceivedAction { get; set; } public MqttClientService(string ipAddress) { // create client instance SubscribeClient = new MqttClient(IPAddress.Parse(ipAddress)); // register to message received SubscribeClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived; string clientId = Guid.NewGuid().ToString(); SubscribeClient.Connect(clientId); //订阅时修改路径(主题)即可 // subscribe to the topic "/home/temperature" with QoS 2 SubscribeClient.Subscribe(new string[] { "avatar/uploaded" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE }); } void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { // handle message received ClientPublishReceivedAction.Invoke(sender, e); } public void client_MqttMsgPublish(string publishString) { SubscribeClient.Publish("avatar/signed", Encoding.UTF8.GetBytes(publishString), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false); } }
C#mqtt库M2Mqtt的使用方法
目前最好用的C#库是 eclipse出的M2Mqtt库,
主页链接: http://www.eclipse.org/paho/clients/dotnet/
项目的地址是 https://github.com/eclipse/paho.mqtt.m2mqtt
使用方式是在vs 的命令中输入 Install-Package M2Mqtt
...
// create client instance
MqttClient client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS)); //注意是域名哦不支持IP
string clientId = Guid.NewGuid().ToString();
client.Connect(clientId);
string strValue = Convert.ToString(value);
// publish a message on "/home/temperature" topic with QoS 2
client.Publish("/home/temperature", Encoding.UTF8.GetBytes(strValue), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
然而,却存在一个坑, MQTT_BROKER_ADDRESS 不能用IP地址,而要用域名,用IP地址会出现在Connect这一步连接失败。放一个示例,可以直接使用的。
https://sdk.bce.baidu.com/console-sdk/mqtt-net.rar?responseContentDisposition=attachment
这个是百度云mqtt物接入的一个例子,用的是mqtt协议,下载后,把域名改一下,就可以用了。
mqtt服务器可以采用http://mosquitto.org/download/ 实现的mosquitto服务器。
Source
- mosquitto-1.6.3.tar.gz (319kB) (GPG signature)
- Git source code repository (github.com)
Older downloads are available at https://mosquitto.org/files/
Windows
- mosquitto-1.6.3-install-windows-x64.exe (~1.4 MB) (64-bit build, Windows Vista and up, built with Visual Studio Community 2017)
- mosquitto-1.6.3-install-windows-x32.exe (~1.4 MB) (32-bit build, Windows Vista and up, built with Visual Studio Community 2017)
组件下载:M2Mqtt.Net.dll (v4.3.0最新版 2019.7.16本地生成)
链接:https://pan.baidu.com/s/1lacs13v9nde8d2wrj2oU4g
提取码:l8cg
相关代码摘要://创建客户端实例(两种方式选择,否则出错,域名需转换) MqttClient client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS)); //主机为IP时 MqttClient client = new MqttClient(MQTT_BROKER_ADDRESS); //当主机地址为域名时 // 注册消息接收处理事件,还可以注册消息订阅成功、取消订阅成功、与服务器断开等事件处理函数 client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; //生成客户端ID并连接服务器 string clientId = Guid.NewGuid().ToString(); client.Connect(clientId); // 订阅主题"/home/temperature" 消息质量为 2 // 三种参数:0 至多1次,1 至少1次,2 只有1次 (好像3保留) client.Subscribe(new string[] { "/home/temperature" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE }); ... void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { //处理接收到的消息 string msg = System.Text.Encoding.Default.GetString(e.Message); textBox1.AppendText("收到消息:" + msg + "\r\n"); } //************************************************************** // 发布消息到主题 "/home/temperature" 消息质量为 2,不保留 client.Publish("/home/temperature", Encoding.UTF8.GetBytes("hello"), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
客户端代码参考2
服务端搭建:apache-apollo-***-windows,下载链接:http://activemq.apache.org/apollo/download.html
解压:在 apache-apollo bin文件夹中,作如下操作:
输入:apollo.cmd create test 创建虚拟test服务器主机,在该文件夹下会生成一个test目录
进入 apache-apollo-1.7.1\bin\test\bin文件,开启服务器。
进入test目录下etc文件夹中,找到apollo.xml
打开浏览器:输入http://127.0.0.1:61680,任意一个都可以,即可进入管理的web界面,账户:admin ,密码:password
测试连接,打开mqtt用户客户端,查看服务器显示情况
using MQTTnet; using MQTTnet.Core; using MQTTnet.Core.Client; using MQTTnet.Core.Packets; using MQTTnet.Core.Protocol; 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 mqtt_client { public partial class Form1 : Form { private MqttClient mqttClient = null; public Form1() { InitializeComponent(); Task.Run(async () => { await ConnectMqttServerAsync(); }); } private async Task ConnectMqttServerAsync() { if (mqttClient == null) { mqttClient = new MqttClientFactory().CreateMqttClient() as MqttClient; mqttClient.ApplicationMessageReceived += MqttClient_ApplicationMessageReceived; mqttClient.Connected += MqttClient_Connected; mqttClient.Disconnected += MqttClient_Disconnected; } try { var options = new MqttClientTcpOptions { Server = "127.0.0.1", Port=61613, ClientId = Guid.NewGuid().ToString(), UserName = "admin", Password = "password", CleanSession = true }; await mqttClient.ConnectAsync(options); } catch (Exception ex) { Invoke((new Action(() => { textBox2.AppendText($"连接到MQTT服务器失败!" + Environment.NewLine + ex.Message + Environment.NewLine); }))); } } private void MqttClient_Connected(object sender, EventArgs e) { Invoke((new Action(() => { textBox2.AppendText("已连接到MQTT服务器!" + Environment.NewLine); }))); } private void MqttClient_Disconnected(object sender, EventArgs e) { Invoke((new Action(() => { textBox2.AppendText("已断开MQTT连接!" + Environment.NewLine); }))); } private void MqttClient_ApplicationMessageReceived(object sender, MqttApplicationMessageReceivedEventArgs e) { Invoke((new Action(() => { textBox2.AppendText($">> {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}{Environment.NewLine}"); }))); } private void button1_Click(object sender, EventArgs e) { string topic = textBox1.Text.Trim(); if (string.IsNullOrEmpty(topic)) { MessageBox.Show("订阅主题不能为空!"); return; } if (!mqttClient.IsConnected) { MessageBox.Show("MQTT客户端尚未连接!"); return; } mqttClient.SubscribeAsync(new List<TopicFilter> { new TopicFilter(topic, MqttQualityOfServiceLevel.AtMostOnce) }); textBox2.AppendText($"已订阅[{topic}]主题" + Environment.NewLine); textBox1.Enabled = false; button1.Enabled = false; } private void button2_Click(object sender, EventArgs e) { string topic = textBox4.Text.Trim(); if (string.IsNullOrEmpty(topic)) { MessageBox.Show("发布主题不能为空!"); return; } string inputString = textBox3.Text.Trim(); var appMsg = new MqttApplicationMessage(topic, Encoding.UTF8.GetBytes(inputString), MqttQualityOfServiceLevel.AtMostOnce, false); mqttClient.PublishAsync(appMsg); } private void Form1_Load(object sender, EventArgs e) { Sunisoft.IrisSkin.SkinEngine skin = new Sunisoft.IrisSkin.SkinEngine { SkinFile = @"./RealOne.ssk" }; } } }
参考资料:
https://github.com/mqtt/mqtt.github.io/wiki/libraries
https://github.com/leytton/m2mqtt (此项目下载后依赖项很多出问题,尝试修改没弄成)
仅部分内容摘自网络整理而成,如有侵权请联系删除。
更多相关内容 -
M2Mqtt.Net.dll
2019-11-25 11:05:36在.net 2.0框架下使用m2mqtt的dll,在xp sp1 系统下可使用推送功能。需要安装.net 2.0 用法参考https://blog.csdn.net/leytton/article/details/51896738 -
【实验四】C# Winform客户端实现M2Mqtt连接Apollo MQTT服务器
2019-05-03 17:04:40C#语言,编写MQTT客户端,连接到实验3的MQTT服务器上,发布一个主题,并且订阅主题。 -
paho.mqtt.m2mqtt
2021-05-03 21:02:03M2Mqtt 适用于.Net和WinRT的MQTT客户端库 项目介绍 M2Mqtt是MQTT客户端,可用于所有.Net平台(.Net Framework,.Net Compact Framework和.Net Micro Framework)和WinRT平台(Windows 8.1,Windows Phone 8.1和... -
M2Mqtt.Net.dll C#库文件
2017-04-11 18:28:44用于MQTT通信的C#客户端 -
Test_M2MQTT.rar
2021-06-22 08:56:25很好的MQTT测试程序,使用M2MQTT库,VS开发。 -
M2Mqtt.zip【c#编程库】
2019-04-26 11:38:21M2Mqtt.zip https://www.nuget.org/packages/M2Mqtt/ -
M2Mqtt_Unity3D
2019-01-20 21:40:11Unity3D可用的C#编程MQTT客户端库文件,在unity项目目录下的Assets目录下新建 Plugins 文件夹,并将 M2Mqtt.dll 和 M2Mqtt.pdb 两个文件放入其中即可完成导入 -
M2Mqtt.NetCF39.dll_mqtt_
2021-10-02 04:42:58M2Mqtt with OpenSSL support for you Project -
c# M2Mqtt 3.5最低版本
2019-05-05 18:18:11在官网上下载的M2Mqtt文件类,3.5不能用,编译过后或是使用.csproj,只有一个4.5的能用,经过整理及测试通过后,发布一个3.5版本,可以直接拿过来编译用。 -
M2Mqtt.Net.zip
2020-01-15 18:30:04最近发现很多人评论说上传的MQTT3.5不能用,上次版本是从官网上直接下来的,最近直接从我正在做的项目当中直接摘出来的MQTT上传上来,vs2008可以直接加载直接,里面有断网重连机制,但具体方法需要在外部事件当中... -
基于 M2Mqtt 和 emqx 实现的MQTT通讯
2020-11-23 16:31:43我这边直接把我试验代码贴上来 using uPLibrary.Networking.M2Mqtt; using uPLibrary.Networking.M2Mqtt.Messages; 后端是tcp协议,默认就是1883端口,就不用改, public class HomeController : Controller { ...配置emqx服务端
1.首先下载emqx服务端。https://www.emqx.io/cn/downloads#broker,下载broker就行。
2.解压,cd到bin目录下,然后敲命令
emqx start
注意在这之前最好保证下面这些端口不被占用。否则你还要emqx restart重启。
尤其是8081端口,冲突概率很高,Url not found 这个错就是因为这个端口冲突所致。
start之后不会有显示成功的状态显示,没其他提示就是成功。
3.之后进入http://localhost:18083/ 默认用户名是admin,密码public。
首次进入设置里面可以将语言改成“中文”。
到这里mqtt服务基本是部署好了。开始编写客户端代码
开始写客户端代码
新建一个web项目,或者winform项目都行。
nuget里面搜 M2Mqtt。(为什么选这个呢,因为这个对.net环境几乎没有依赖,任何版本的.net都能运行。好多其他的Mqttnet什么的都要求core才行)
安装完后github(https://github.com/eclipse/paho.mqtt.m2mqtt,如果连接没了就自己在github上搜m2mqtt)上面有源码和案例,粘下来几段开始试验。
我这边直接把我试验代码贴上来
using uPLibrary.Networking.M2Mqtt; using uPLibrary.Networking.M2Mqtt.Messages;
后端是tcp协议,默认就是1883端口,就不用改,
public class HomeController : Controller { string MQTT_BROKER_ADDRESS = "192.168.0.10"; public string recive_message { get; set; } public ActionResult Index() { // create client instance MqttClient client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS)); // register to message received client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; string clientId = Guid.NewGuid().ToString(); client.Connect(clientId); // subscribe to the topic "/home/temperature" with QoS 2 client.Subscribe(new string[] { "/home/temperature" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE }); return View(); } void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { recive_message = System.Text.Encoding.UTF8.GetString(e.Message); // handle message received } public JsonResult post(string message) { MqttClient client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS)); string clientId = Guid.NewGuid().ToString(); client.Connect(clientId); // publish a message on "/home/temperature" topic with QoS 2 client.Publish("/home/temperature", Encoding.UTF8.GetBytes(message), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false); return Json(true); } }
这个类库太精简了,精简到看方法名称就知道这个是干嘛的了。真的不用再去讲解这个类库怎么用了。
后端(winform)接收发送消息到这就差不多了。
下面开始前端(web)接受发送消息。
前端我们添加引用(https://github.com/eclipse/paho.mqtt.javascript) 官方说明文档:https://www.eclipse.org/paho/files/jsdoc/Paho.MQTT.Client.html js下载地址:https://www.eclipse.org/downloads/download.php?file=/paho/releases/1.0.3/paho.javascript-1.0.3.zip
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js" type="text/javascript"></script>
然后加下面这段代码,也是人家官网抄的,前端是走的websocket协议,所以是8083端口。
// Create a client instance client = new Paho.MQTT.Client("127.0.0.1", 8083, "clientId"); // set callback handlers client.onConnectionLost = onConnectionLost; client.onMessageArrived = onMessageArrived; // connect the client client.connect({ onSuccess: onConnect }); // called when the client connects function onConnect() { // Once a connection has been made, make a subscription and send a message. console.log("onConnect"); client.subscribe("/home/temperature"); message = new Paho.MQTT.Message("Hello"); message.destinationName = "World"; client.send(message); } // called when the client loses its connection function onConnectionLost(responseObject) { if (responseObject.errorCode !== 0) { console.log("onConnectionLost:" + responseObject.errorMessage); } } // called when a message arrives function onMessageArrived(message) { console.log("onMessageArrived:" + message.payloadString); }
到这调吧调吧基本就都通了。。。
最后
最后我补充一下emqx和 咱们 写好的客户端 联调测试的方法。
显示 当前状态: 已连接 就对了
然后
订阅完成,
代码写完了,就可以各种进行收发测试了。
-
C#使用M2Mqtt库进行MQTT简单通讯
2021-03-02 14:48:34C#使用M2Mqtt库进行MQTT简单通讯M2Mqtt库资源MQTT连接MQTT主题发布--发消息MQTT订阅主题--收消息小工具界面 M2Mqtt库资源 一开始有查找Mqttnet的源码,但是比较乱,编译不过去,后来选择了M2Mqtt。源码清晰简洁,...C#使用M2Mqtt库进行MQTT简单通讯
M2Mqtt库资源
一开始有查找Mqttnet的源码,但是比较乱,编译不过去,后来选择了M2Mqtt。源码清晰简洁,使用靠谱。
1、M2Mqtt 下载代码自己生成一下就可以在BIN文件夹里面找到相关的库。
2、在NuGet库里面直接查找M2Mqtt也可以安装库。MQTT连接
public MqttClient mqttClient { get; set; } private static string EMQX_BROKER_IP = "192.168.10.165"; private static int EMQX_BROKER_PORT = 1884; // 建立MQTT连接 private void mqttConnect() { EMQX_CLIENT_ID = Guid.NewGuid().ToString(); try { //建立连接 mqttClient = new MqttClient(EMQX_BROKER_IP, EMQX_BROKER_PORT, false, null, null, MqttSslProtocols.TLSv1_2); //下面这种方法是个坑,并不能正常访问到MQTT服务器 // mqttClient = new MqttClient(IPAddress.Parse(EMQX_BROKER_IP)); mqttClient.Connect(EMQX_CLIENT_ID); mqttClient.MqttMsgPublishReceived += Client_MqttMsgPublishReceived; connectbtn.BackColor = Color.Green; } catch (Exception ex) { MessageBox.Show(ex.Message); } } //这段定义了收到消息之后做什么事情 private void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { string topic = e.Topic.ToString(); string message = System.Text.Encoding.Default.GetString(e.Message); //同时订阅两个或者以上主题时,分类收集收到的信息 if (topic == subscribetopictxt.Text) { messageArray.Add(message); } if (topic == subscribetopictxt1.Text) { messageArray1.Add(message); } //reciveTopic.Text = topic; //reciveMessagetxt.Text = message; }
MQTT主题发布–发消息
public void publishTopic(string currentTopic, string content) { if (mqttClient != null && !string.IsNullOrEmpty(currentTopic) && !string.IsNullOrEmpty(content)) { mqttClient.Publish(currentTopic, System.Text.Encoding.UTF8.GetBytes(content), qos, true); } }
MQTT订阅主题–收消息
private void subscribebtn_Click(object sender, EventArgs e) { mqttClient.Subscribe(new string[] { subscribetopictxt.Text }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE }); }
小工具界面
同时发布了两个主题,然后订阅两个主题。分别收两个主题的消息并显示出来。
收到消息后存起来,显示的时候另外起定时器去扫才能正常显示。 -
M2Mqtt.dll
2016-11-21 11:17:48C# 调用M2Mqtt.DLL -
C#使用M2Mqtt快速连接MQTT server,C#接收mqtt消息
2019-08-11 01:15:02MQTT是一种适用于物联网的,稳定的,可靠的通信协议。本篇主要介绍如何使用C#订阅mqtt消息,接收和处理mqtt消息。MQTT简介
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
MQTT消息有三种质量等级
-
“至多一次”(QoS==0),消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
-
“至少一次”(QoS==1),确保消息到达,但消息重复可能会发生。
-
“只有一次”(QoS==2),确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
- 具体使用还要看消息中间件是否支持3种质量等级
使用 M2Mqtt 订阅 mqtt消息
- 新建C#工程,添加M2Mqtt程序包并引用
- 使用M2Mqtt订阅消息
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using uPLibrary.Networking.M2Mqtt; using uPLibrary.Networking.M2Mqtt.Messages; namespace Get_MQTT { class Program { static void Main(string[] args) { // MQTT的主题 topic string topic = "/mqtt/test"; // MQTT服务器IP地址 string host = "127.0.0.1"; int serverPort = 1883; // 实例化Mqtt客户端 MqttClient client = new MqttClient(host, Convert.ToInt32(serverPort), false, null, null, MqttSslProtocols.TLSv1_2); // 注册接收消息事件 client.MqttMsgPublishReceived += client_MqttMsgPublishReceived; string clientId = Guid.NewGuid().ToString(); client.Connect(clientId); // 订阅主题 "/mqtt/test", 订阅质量 QoS 2 client.Subscribe(new string[] { topic }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE }); } static void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { // 打印从订阅的Topic发布端收到的消息 Console.WriteLine(string.Format("subscriber,topic:{0},content:{1}", e.Topic, Encoding.UTF8.GetString(e.Message))); } } }
使用中会遇到的问题
M2Mqtt使用起来看似很简单,但是这只是一个接收消息的例程,实际使用过程中可能还会出现端口变更,连接异常等等问题。
M2Mqtt GitHub地址:https://github.com/eclipse/paho.mqtt.m2mqtt如果觉得M2Mqtt不够灵活的话,还可以使用 MqttLib
-
-
M2Mqtt断网重连
2019-06-12 09:38:18在使用M2Mqtt.dll这个控件时候,对于断网后,按照网上的说法,是处于broken状态,而且这个状态基本是不会主动改变的,在连接后,还是不能重新收发数据,而且这个控件当中,Ping检索是使用的1分钟检索一次,再次内部... -
C#mqtt库M2Mqtt的使用
2019-02-01 23:32:16目前最好用的C#库是 eclipse出的M2Mqtt库,主页链接:http://www.eclipse.org/paho/clients/dotnet/ 项目的地址是...Install-Package M2Mqtt 项目主页上介绍看起来很简单 ... /... -
C#使用M2MQTT快速实现MQTT通信
2019-07-11 15:53:50最近项目需要用到消息的订阅发布,因此使用了MQTT方式实现。 首先,在项目中引入MMQTT包: 1.在官网下载MMQTT包(此处用的4.3.0.0版本),将包copy到项目的libs文件夹中 2.在项目的“引用”那里右键,“添加引用”,... -
M2Mqtt dll文件ForNET版本的
2017-12-18 17:13:42找了好久,才找到这个好用的,分享给大家,同时自己也MARK一下 -
C# MQTT M2MQTT
2022-04-21 21:49:48MQTT M2MQTT[MQTT 入门介绍](https://www.runoob.com/w3cnote/mqtt-intro.html)[MQTT QoS等级](https://blog.csdn.net/solo_jm/article/details/103402309)主题运用M2MQTT实现M2MQTT类库说明MqttClient主要方法MQTT... -
MQTT学习(四)--使用m2mqtt在Unity3D中实现MQTT客户端
2018-12-15 18:58:04在前面的几篇文章中分别在桌面客户端和Web客户端中实现了MQTT协议的功能,为了丰富MQTT协议的使用场景,本篇文章就来尝试如何在Unity3D中实现MQTT协议的部分功能。 1.需求分析 ... -
M2MQTT客户端MqttClient异常问题解决
2018-09-27 00:01:11最近做一个物联网设备模拟器,C#+net4.5,采用M2Mqtt.Net.dll开发库,从VS2017工具nuget安装。服务器采用EMQ 2.3.11稳定版。 计划是一个c#winform应用程序,批量模拟多个物联网数据采集器上传数据到服务器。1分钟... -
mqtt-net_m2mqtt.net.dll_c#mqtt_chaptercw8_vb.netmqtt_mqtt_
2021-10-04 05:03:36MQTT communication client sample using c# -
C# MQTT客户端--M2MQTT
2017-09-06 19:23:11m2mqtt库:https://github.com/eclipse/paho.mqtt.m2mqtt m2mqtt手册:https://m2mqtt.wordpress.com/using-mqttclient/ m2mqtt下载:https://www.nuget.org/packages/M2Mqtt/ 准备 本客户端使用VS2015进行开发... -
M2MQTT 使用方式
2018-01-05 23:09:30导入文件 ...using uPLibrary.Networking.M2Mqtt; using uPLibrary.Networking.M2Mqtt.Messages; 初始化 //DMS.Init() //默认地址也是mqtt.dms.aodianyun.com DMS.Init("mqtt.dms.aodianyun.com"); -
MQTT协议 C#客户端(基于M2MQTT)
2016-07-13 12:14:411、引入M2MQTT的dll库文件 点击此处下载M2Mqtt.Net.dll 2、建立客户端连接并订阅 //创建客户端实例 MqttClient client = new MqttClient(IPAddress.Parse(MQTT_BROKER_ADDRESS)); //主机为IP时 MqttClient ...