C#使用MQTT通讯协议发布订阅主题报文

news/2024/10/6 4:35:54/文章来源:https://www.cnblogs.com/jiangyuhu/p/18276778

一、服务端

  1.添加引用MQTTnet类库  

         

  2.代码:启动一个MQTT服务

 1         // 启动一个MQTT服务器
 2             // MQTT 
 3             IMqttServer server = new MqttFactory().CreateMqttServer();
 4             server.ClientConnectedHandler = new MqttServerClientConnectedHandlerDelegate(new Action<MqttServerClientConnectedEventArgs>(Connected));
 5 
 6             // IP  Port   用户名  密码
 7             MqttServerOptionsBuilder builder = new MqttServerOptionsBuilder()
 8                 .WithDefaultEndpointBoundIPAddress(System.Net.IPAddress.Parse("127.0.0.1"))// 指定IP
 9                 .WithDefaultEndpointPort(1883)// 默认使用1883端口,换成其他端口可能通信不了
10                 .WithConnectionValidator(valid =>
11                 {
12                     // 用户名和密码验证
13                     if (valid.Username != "admin" && valid.Password != "123456")
14                     {
15                         valid.ReturnCode = MqttConnectReturnCode.ConnectionRefusedBadUsernameOrPassword;
16                     }
17                     else
18                         valid.ReturnCode = MqttConnectReturnCode.ConnectionAccepted;
19                 });
20             IMqttServerOptions options = builder.Build();
21             // 启动
22             await server.StartAsync(options);
23 
24             Console.WriteLine("MQTT服务已启动......");
25 
26             // 1、知道有哪个连接进来了
27             // 2、订阅-主题     发布-主题(负载  内容)
28             // 3、服务端接收到一个消息的时候,中转出去(发布的过程:主题进行发布:多个客户端)

 

 二、客户端

  1.添加包“MQTTnet.Extensions.ManagedClient”的引用  

           

  2.代码:启动一个MQTT的客户端

 1      // 启动一个MQTT的客户端
 2             IManagedMqttClient mqttClient = new MqttFactory().CreateManagedMqttClient();
 3             // 客户端ID   IP   Port  用户名  密码
 4 
 5             var clientOptions = new MqttClientOptionsBuilder()
 6                 .WithClientId(Guid.NewGuid().ToString())
 7                 .WithTcpServer("127.0.0.1", 1883)
 8                 .WithCredentials("admin", "123456");
 9             var option = new ManagedMqttClientOptionsBuilder()
10                 .WithClientOptions(clientOptions.Build());
11             mqttClient.StartAsync(option.Build()).GetAwaiter().GetResult();
12 
13             // 订阅一个主题 
14             mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic("Test").Build());
15             mqttClient.UseApplicationMessageReceivedHandler(msg =>
16             {
17                 Debug.WriteLine(Encoding.UTF8.GetString(msg.ApplicationMessage.Payload));
18             });
19 
20             // 各设备订阅的主题    数据库里维护
21 
22             MqttApplicationMessage msg = new MqttApplicationMessage();
23             msg.Topic = "测试发布";
24             msg.Payload = Encoding.UTF8.GetBytes("客户端发布消息");
25             msg.QualityOfServiceLevel = MqttQualityOfServiceLevel.AtMostOnce;
26             mqttClient.PublishAsync(msg).GetAwaiter().GetResult();

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/734279.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图解 Jenkins Pipeline 的前端自动化部署,用上后真香!

图解 Jenkins Pipeline 的前端自动化部署,用上后真香! 原创 悟空聊架构 悟空聊架构 2024-06-27 20:57 广东 听全文你好,我是悟空。 本文目录如下:一、Jenkins 前端部署思路1.1 整体架构图1.2 部署步骤二、Pipeline和自由风格对比三、Pipeline 核心脚本3.1 获取 Git 代码分支…

23201115-邓俊豪-第三次blog

目录blog2前言关于难度和题目量关于知识点设计与分析pta-7一、项目简介二、项目实现三、项目测试四、代码示例五、总结六、代码分析pta-8一、项目简介二、项目实现三、项目测试四、代码示例五、总结六、代码分析改进建议 blog2 前言 关于难度和题目量 前三次大作业难度属于偏难…

Fastapi 项目第二天首次访问时数据库连接报错问题Cant connect to MySQL server

问题描述 Fastapi 项目使用 sqlalchemy 连接的mysql 数据库,每次第二天首次访问数据库相关操作,都会报错:sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Cant connect to MySQL server on x.x.x.x ([Errno 111] Connection refused)"…

linux安装中文字体

1.从windows复制宋体字体2.linux系统下/usr/share/fonts 3.创建simsun路径,将字体文件放进去4.改一下字体权限 cd /usr/share/fonts/ sudo chmod -R myfonts 7555.安装依赖 yum install mkfontscale yum install fontconfig6.执行以下命令 mkfontscale mkfontdir fc-cache7.查看…

(五)DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍

DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍如需引用 DeepSpeed Chat,请引用我们的arxiv report: @article{yao2023dschat,title={{DeepSpeed-Chat: Easy, Fast and Affordable RLHF Training of ChatGPT-like Models at All Scales}},author={Zh…

第7-8次OOP作业总结

一、前言 1.第七次作业(家居强电电路模拟程序-3) 这次作业题目在原先的基础上新增用电器新增了互斥开关和受控窗帘,同时存在多个并联电路,无疑在上次作业的基础上过程没有太大变化,难度也是相当,主要是新的用电器的添加问题。并联电路的改动还好说,上次作业我便考虑到了,…

Python——比 Seaborn 更好的相关性热力图:Biokit Corrplot

在 Python 中我们日常分析数据的过程当中经常需要对数据进行相关性分析,相关性热力图(Correlation Heatmap)是我们经常使用的一种工具。通过相关性热力图,我们可以通过为相关性不同的数据使用不同深浅的不同颜色进行标记,从而直观地观察两两数据序列之间的相关性情况——这…

流量治理核心策略

熔断、隔离、重试、降级、超时、限流https://mp.weixin.qq.com/s/_3pht6cFdkuRfrE1z0dpKQ

第三次blog大作业

1,前言:最后两次大作业都是只有一道题,就是前面的家庭电路模拟题的迭代,题目量虽然看起来很少只有一道题目,但是这一道题目也比前面出几道题目的时候花的时间还要长,第七次大作业的迭代主要考虑的是单刀双置开光,单刀双置开关为了避免短路,他连接不同的电路还会有不同的…

PTA题目集7~8的总结性Blog

前言: 对于我这种水平的学生来说本次的7-8次PTA的难度之大令我无从下手,况且之前的第6次PTA就已经让我望而止步了,更别提这两次在第6次PTA题目集之上再次进行迭代的题目了。再加上面临的期末周,大量学科等着我去复习,以至于没时间去钻磨PTA的改动,哭死,连老师都说单单是…

如何刻画复杂事件

用简单的基本事件来刻画复杂事件前言 复杂事件的刻画 ✍️[网摘整理]设 \(A\),\(B\) 是试验 \(E\) 的随机事件,深入体会用基本事件的和或积的运算来刻画复杂事件,并熟练掌握: ① \(A\)发生:\(A=AB+A\bar{B}\); ② 只有 \(A\) 发生:\(A\bar{B}\); ③ \(A\),\(B\) 恰有一…

VS2022 csproject文件增加发布时文件项

发布时新加的node_modules 总是不会伴随着其他文件一起发布到文件夹里面。一个一个添加选项太麻烦了。百度查询后发现可以通过修改csproject 把node_modules //添加节点即可 <ItemGroup> <Content Include="wwwroot\assets\node_modules\**"> <C…