基于MQTTnet 3.0.12实现MQTT服务器和客户端

基于MQTTnet 3.0.12实现MQTT服务器和客户端)

概述-可看可不看的废话

现在物联网的概念很火,辣条从业7年来一直号称是“自动化工程师”,但其实到目前为止,所处的行业还是比较局限在自动化产线改造。就工业智能互联来说,水平方向上如何把流水线式的孤岛式机台联动起来,我们比较有经验,但是垂直方向上,如何做数采,或者说如何高效灵活的做数采,需要补课的东西还有很多。MQTT是IBM很早以前就提出来的协议,但很可惜一直没有接触过,新公司的项目上引用了MQTTnet的开源库,但是这个GitHub作者跳版跳得太狠了点,随着新版本的更新,改了很多旧版的东西,导致百度排在前几的文章都没法直接借鉴了,无奈之下,疯狂百度+阅读Git上源码,总算搞出来一个小的Demo,特此记录如下。

MQTT是啥

MQTT 是物联网 (IoT) 的 OASIS 标准消息传递协议。它设计为极其轻量级的发布/订阅消息传输,非常适合连接具有小代码占用空间和最小网络带宽的远程设备。如今,MQTT 广泛应用于汽车、制造、电信、石油和天然气等行业。

好了,这段话是我抄的MQTT官网的,英语原文,浏览器直译,傲娇。
官网指路:https://mqtt.org/

MQTTnet

MQTTnet是基于MQTT通信的高性能.NET库,它提供了一个MQTT客户端和一个MQTT服务器(代理)。截止目前,最新版本为3.0.12.0,支持.net core,支持MQTT 3.X和5.0版本。

https://github.com/chkr1011/MQTTnet
MQTTnet的Git路径。

正文

本Demo设计为一个Winform窗体程序。基于MQTTnet,实现了一个MQTT Server或者说Broker的创建,同时在窗体上提供了MQTT Client的创建功能,MQTT Client跟Server连接之后,通过点击按钮,实现主题订阅、发布的基础功能。

UI界面

MQTT Server/Broker实现

创建MQTT Server的思路还是蛮清晰的,主要是MqttServer各个事件的实现,一开始很懵逼,因为3.0.12的写法变化跟2.X完全不一样。
这里贴一段MQTTnet的代码,方便理解类的实现——
在这里插入图片描述
在这里插入图片描述

MQTT Server/Broker创建

  • 先定义好MqttServerOptions,这是启动Mqtt服务时候的传参,定义服务启动时的各种参数:IP、Port口,账密等等
var optionsBuilder = new MqttServerOptionsBuilder();
  • 实例化MqttServer以及委托实现MqttServer的各个事件
mqttServer = new MqttFactory().CreateMqttServer() as MqttServer;
mqttServer.StartedHandler = new MqttServerStartedHandlerDelegate(OnMqttServerStarted);
mqttServer.StoppedHandler = new MqttServerStoppedHandlerDelegate(OnMqttServerStopped);

下面是完成的实现代码:

public MqttServer mqttServer = null;
public async void StartMqttServer()
{
   
    try
    {
   
        if (mqttServer == null)
        {
   
            var config = ReadConfiguration();
            var optionsBuilder = new MqttServerOptionsBuilder()
            .WithDefaultEndpoint().WithDefaultEndpointPort(int.Parse(config["Port"].ToString())).WithConnectionValidator(
                c =>
                        {
   
                            var currentUser = config["Users"][0]["UserName"].ToString();
                            var currentPWD = config["Users"][0]["Password"].ToString();

                            if (currentUser == null || currentPWD == null)
                            {
   
                                c.ReasonCode = MqttConnectReasonCode.BadUserNameOrPassword;
                                return;
                            }

                            if (c.Username != currentUser)
                            {
   
                                c.ReasonCode &#
  • 16
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值