mqttnet 详解_mqttnet3.0用法

mqttnet 详解_mqttnet3.0用法1///开源库地址:https://github.com/chkr1011/MQTTnet2///对应文档:https://github.com/chkr1011/MQTTnet/wiki/Client34usingMQTTnet;5usingMQTTnet.Client;6usingMQTTnet.Client.Options;7usingSystem;8usingSystem.T…

大家好,又见面了,我是你们的朋友全栈君。

1 ///开源库地址:https://github.com/chkr1011/MQTTnet

2 ///对应文档:https://github.com/chkr1011/MQTTnet/wiki/Client

3

4 usingMQTTnet;5 usingMQTTnet.Client;6 usingMQTTnet.Client.Options;7 usingSystem;8 usingSystem.Text;9 usingSystem.Threading;10 usingSystem.Threading.Tasks;11 usingSystem.Windows.Forms;12

13 namespaceMqttServerTest14 {15 public partial classmqtt测试工具 : Form16 {17 private IMqttClient mqttClient = null;18 private bool isReconnect = true;19

20 publicmqtt测试工具()21 {22 InitializeComponent();23 }24

25 private void Form1_Load(objectsender, EventArgs e)26 {27

28 }29

30 private async void BtnPublish_Click(objectsender, EventArgs e)31 {32 awaitPublish();33 }34

35 private async void BtnSubscribe_ClickAsync(objectsender, EventArgs e)36 {37 awaitSubscribe();38 }39

40 private asyncTask Publish()41 {42 string topic =txtPubTopic.Text.Trim();43

44 if (string.IsNullOrEmpty(topic))45 {46 MessageBox.Show(“发布主题不能为空!”);47 return;48 }49

50 string inputString =txtSendMessage.Text.Trim();51 try

52 {53

54 var message = newMqttApplicationMessageBuilder()55 .WithTopic(topic)56 .WithPayload(inputString)57 .WithExactlyOnceQoS()58 .WithRetainFlag()59 .Build();60

61 awaitmqttClient.PublishAsync(message);62 }63 catch(Exception ex)64 {65

66 Invoke((new Action(() =>

67 {68 txtReceiveMessage.AppendText($”发布主题失败!” + Environment.NewLine + ex.Message +Environment.NewLine);69 })));70 }71

72

73

74

75 }76

77 private asyncTask Subscribe()78 {79 string topic =txtSubTopic.Text.Trim();80

81 if (string.IsNullOrEmpty(topic))82 {83 MessageBox.Show(“订阅主题不能为空!”);84 return;85 }86

87 if (!mqttClient.IsConnected)88 {89 MessageBox.Show(“MQTT客户端尚未连接!”);90 return;91 }92

93 //Subscribe to a topic

94 await mqttClient.SubscribeAsync(newTopicFilterBuilder()95 .WithTopic(topic)96 .WithAtMostOnceQoS()97 .Build()98 );99 Invoke((new Action(() =>

100 {101 txtReceiveMessage.AppendText($”已订阅[{topic}]主题{Environment.NewLine}”);102 })));103

104 }105

106 private asyncTask ConnectMqttServerAsync()107 {108 //Create a new MQTT client.

109

110 if (mqttClient == null)111 {112 try

113 {114 var factory = newMqttFactory();115 mqttClient =factory.CreateMqttClient();116

117 var options = newMqttClientOptionsBuilder()118 .WithTcpServer(txtIp.Text, Convert.ToInt32(txtPort.Text)).WithCredentials(txtUsername.Text, txtPsw.Text).WithClientId(txtClientId.Text) //Port is optional

119 .Build();120

121

122 awaitmqttClient.ConnectAsync(options, CancellationToken.None);123 Invoke((new Action(() =>

124 {125 txtReceiveMessage.AppendText($”连接到MQTT服务器成功!” +txtIp.Text);126 })));127 mqttClient.UseApplicationMessageReceivedHandler(e =>

128 {129

130 Invoke((new Action(() =>

131 {132 txtReceiveMessage.AppendText($”收到订阅消息!” +Encoding.UTF8.GetString(e.ApplicationMessage.Payload));133 })));134

135 });136 }137 catch(Exception ex)138 {139

140 Invoke((new Action(() =>

141 {142 txtReceiveMessage.AppendText($”连接到MQTT服务器失败!” + Environment.NewLine + ex.Message +Environment.NewLine);143 })));144 }145 }146 }147

148 private void MqttClient_Connected(objectsender, EventArgs e)149 {150 Invoke((new Action(() =>

151 {152 txtReceiveMessage.Clear();153 txtReceiveMessage.AppendText(“已连接到MQTT服务器!” +Environment.NewLine);154 })));155 }156

157 private void MqttClient_Disconnected(objectsender, EventArgs e)158 {159 Invoke((new Action(() =>

160 {161 txtReceiveMessage.Clear();162 DateTime curTime = newDateTime();163 curTime =DateTime.UtcNow;164 txtReceiveMessage.AppendText($”>> [{curTime.ToLongTimeString()}]”);165 txtReceiveMessage.AppendText(“已断开MQTT连接!” +Environment.NewLine);166 })));167

168 //Reconnecting

169 if(isReconnect)170 {171 Invoke((new Action(() =>

172 {173 txtReceiveMessage.AppendText(“正在尝试重新连接” +Environment.NewLine);174 })));175

176 var options = newMqttClientOptionsBuilder()177 .WithClientId(txtClientId.Text)178 .WithTcpServer(txtIp.Text, Convert.ToInt32(txtPort.Text))179 .WithCredentials(txtUsername.Text, txtPsw.Text)180 //.WithTls()

181 .WithCleanSession()182 .Build();183 Invoke((new Action(async () =>

184 {185 await Task.Delay(TimeSpan.FromSeconds(5));186 try

187 {188 awaitmqttClient.ConnectAsync(options);189 }190 catch

191 {192 txtReceiveMessage.AppendText(“### RECONNECTING FAILED ###” +Environment.NewLine);193 }194 })));195 }196 else

197 {198 Invoke((new Action(() =>

199 {200 txtReceiveMessage.AppendText(“已下线!” +Environment.NewLine);201 })));202 }203 }204

205 private void MqttClient_ApplicationMessageReceived(objectsender, MqttApplicationMessageReceivedEventArgs e)206 {207 Invoke((new Action(() =>

208 {209 txtReceiveMessage.AppendText($”>> {“### RECEIVED APPLICATION MESSAGE ###”}{Environment.NewLine}”);210 })));211 Invoke((new Action(() =>

212 {213 txtReceiveMessage.AppendText($”>> Topic = {e.ApplicationMessage.Topic}{Environment.NewLine}”);214 })));215 Invoke((new Action(() =>

216 {217 txtReceiveMessage.AppendText($”>> Payload = {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}{Environment.NewLine}”);218 })));219 Invoke((new Action(() =>

220 {221 txtReceiveMessage.AppendText($”>> QoS = {e.ApplicationMessage.QualityOfServiceLevel}{Environment.NewLine}”);222 })));223 Invoke((new Action(() =>

224 {225 txtReceiveMessage.AppendText($”>> Retain = {e.ApplicationMessage.Retain}{Environment.NewLine}”);226 })));227 }228

229 private void btnLogIn_Click(objectsender, EventArgs e)230 {231 isReconnect = true;232 Task.Run(async () => { awaitConnectMqttServerAsync(); });233 }234

235 private void btnLogout_Click(objectsender, EventArgs e)236 {237 isReconnect = false;238 Task.Run(async () => { awaitmqttClient.DisconnectAsync(); });239 }240

241 }242 }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152856.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 浮动广告代码实例「建议收藏」

    浮动广告代码实例「建议收藏」很多网站的页面都有漂浮的广告效果,虽然烦人,但也确实起到了良好的宣传效果。各大代码网站也有关于漂浮代码的实例,很多存在着兼容性问题,不符合W3C标准,本站修复了兼容性问题,下面就简单介绍一下如何实现此效果。代码如下:[HTML]纯文本查看复制代码运行代码0102030405060708091011121314151617181920212223242526272829303

    2022年9月20日
  • 所谓的CS和BS_CS程序

    所谓的CS和BS_CS程序    我们在步入CSharp之后,新接触了CS和BS这两个概念,今天小编就给大家分享一下有关CS和BS的知识,如有雷同不胜荣幸  CS:即Cilent/Sever(客户机/服务器)结构,CS在技术上很成熟,主要特点是交互性强,具有安全的存取模式,响应速度快,利于处理大量数据,但是灵活性不好,管理和维护费用高,通常用于小型局域网络。  BS:即Browser/Sever(浏览器/服务器)结…

    2022年9月8日
  • Word2007怎样从随意页開始设置页码 word07页码设置毕业论文

    Word2007怎样从随意页開始设置页码 word07页码设置毕业论文

    2021年11月15日
  • 哈佛大学《幸福课》笔记

    哈佛大学《幸福课》笔记前述整个九月份以来一直在找工作,工作签好后有各种杂事需要做。当然,更主要的原因是自己懒,所以博客有一个多月没有更新了。今天将自己在大二暑假跟着视频学过的哈佛大学的《幸福课》整理成一篇文章,希望自己以后能够克服困难,多阅读,多学习,多写作,每天能够过的开心充实有意义。《幸福课》笔记(Tal的幸福秘籍)1、你问的问题经常会决定你所做的探索,问题会带来探索。2、信念创造现实,如何理解

    2022年7月25日
  • 通俗易懂的双亲委派机制

    通俗易懂的双亲委派机制你得先知道在介绍双亲委派机制的时候,不得不提ClassLoader。说ClassLoader之前,我们得先了解下Java的基本知识。Java是运行在Java的虚拟机(JVM)中的,但是它是怎么就运行在JVM中了呢?我们在IDE中编写的Java源代码被编译器编译成.class的字节码文件。然后由我们得ClassLoader负责将这些class问价加载到JVM中去执行。JVM中…

    2022年5月24日
  • phpstorm 2021 激活码[在线序列号]

    phpstorm 2021 激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号