欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在.NET 6环境下,轻松实现MQTT通信:服务器与客户端间双向消息订阅与发布实战代码展示

最编程 2024-02-21 19:54:13
...


前言: MQTT广泛应用于工业物联网、智能家居、各类智能制造或各类自动化场景等。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,在很多受限的环境下,比如说机器与机器通信、机器与物联网通信等。好了,科普的废话不多说,下面直接通过.NET环境来实现一套MQTT通信demo,实现服务端与客户端的双边消息发布与订阅的功能和演示。

 

开发环境:

VS2022 + .NET 6 + Webapi / 控制台

 

1、新建一个webapi项目,用来后面做测试使用


1995789-20220703194134355-483218839.png


2、新建一个继承自IHostedService的服务,用于随着webapi程序的启动而自动执行。(最终代码在文末)


1995789-20220703194205010-1299395058.png


3、引入 MQTTNet 包,该项目提供了.net环境下的MQTT通信协议支持,这款框架很优秀,此处直接引用它来进行使用。


1995789-20220703194345070-1810279689.png


4、在上面的MqttHostService类里面,开始方法里面新增初始化MQTT服务端的一些功能,例如 IP、端口号、事件等等。


1995789-20220703194636641-1567439202.png


5、mqtt服务端支持的一系列功能很多,大佬们可以自行去尝试一些新发现,此处只使用若干个简单功能。


1995789-20220703194830275-502253778.png


6、添加客户端连接事件、连接关闭事件


1995789-20220703194928106-1460692685.png

 

7、由于事件要用的可能有点多,此处就不一一例举了,可以直接看以下的代码,以及有关注释来理解。


1995789-20220703195009822-97634286.png


8、事件触发时候,打印输出


1995789-20220703195107565-214206639.png

 

9、输出之前,记录一个当前事件名称标记一下,用于可以更加清楚看出是哪个事件输出的。


1995789-20220703215235523-678532482.png

 

10、对MqttHostService类进行注册,用于程序启动时候跟随启动。


1995789-20220703215345229-1564643322.png

 

11、上面貌似设计的不是很友好,所以把mqtt服务实例单独弄出来,写入到单独的类里面做成属性,供方便调用。

  1995789-20220703215441638-987500302.png


12、把先前的一些东西改一下,换成使用上面步骤的属性来直接调用使用。


1995789-20220703215547355-2106860901.png


13、运行一下,看看是否可以成功,显示服务已启动,说明服务启动时OK的了.


1995789-20220703215702808-1751344784.png

 

14、新增一个控制台程序 MqttClient,用于模拟客户端。


1995789-20220703215756942-1232256291.png


15、创建客户端启动以及有关配置信息和有关事件,如图。具体使用可以看代码注释,就不过多解释了。

  1995789-20220703215840102-114291994.png


16、在program类里面,调用客户端启动方法,用于测试使用。


1995789-20220703215941108-1286692271.png


17、上面客户端对应的三个事件的实现如图,同时进行有关信息的打印输出。


1995789-20220703220050242-1487085793.png

 

18、启动服务端,然后启动客户端,可以看到服务端有一个连接失败的消息,这个是因为上面配置的客户端用户名是admin,密码是1234567,而服务端配置的规则是,用户名是admin  密码是123456

1995789-20220703220148788-635156660.png

 

19、密码改回正常匹配项以后,再重新运行试试看,可以看到客户端与服务端连接上了。


1995789-20220703220343280-644593861.png

 

20、如果关闭客户端,也可以看到服务端会进入客户端关闭事件内。

  1995789-20220703220439491-842049005.png


21、把上面主题订阅的内容写到连接成功以后的事件里面,不然客户端连接期间,可能就执行了主题订阅,会存在订阅失败的情况。改为写入到连接成功以后的事件里面,可以保证主题订阅肯定是在客户端连接成功以后才执行的。