1.引入MQTTnet.dll

本例引用版本为3.0.15.0,运行环境为.net Framework 4.6.1, 如版本更新,请参考最新官方文档:https://github.com/chkr1011/MQTTnet/wiki/

2.创建mqttServer

 private IMqttServer MqttServer;

 private MqttServerOptionsBuilder MqttServerOptions;

  MqttServerOptions = new MqttServerOptionsBuilder()
              .WithDefaultEndpointBoundIPAddress(IPAddress.Parse(“192.168.1.1”))//ip
                .WithDefaultEndpointPort(1883) //端口号
                .WithConnectionValidator(c => 
                {
                    if (c.ClientId.Length < 10)
                    {
                        c.ReasonCode = MqttConnectReasonCode.ClientIdentifierNotValid;
                        return;
                    }

                    if (c.Username != "Username") //用户名
                    {
                        c.ReasonCode = MqttConnectReasonCode.BadUserNameOrPassword;
                        return;
                    }

                    if (c.Password != "Password") //密码
                    {

                        c.ReasonCode = MqttConnectReasonCode.BadUserNameOrPassword;
                        return;
                    }

                    logger.Info($"{c.ClientId}连接成功!");
                    c.ReasonCode = MqttConnectReasonCode.Success;
                });

   MqttServer = new MqttFactory().CreateMqttServer();

   MqttServer.StartAsync(MqttServerOptions.Build());

   MqttServer.UseApplicationMessageReceivedHandler(e =>
            {
               var payload = e.ApplicationMessage.ConvertPayloadToString();

                logger.Info($"主题:{e.ApplicationMessage.Topic}");
                logger.Info($"信息:{payload}");


           });

3.创建客户端并发布主题


var MqttClient = new MqttFactory().CreateMqttClient();


var mqttOptions = new MqttClientOptions()
            {
                ClientId = "Client1",
                ChannelOptions = new MqttClientTcpOptions()
                {
                    Server = "192.168.1.1",
                    Port = 1883
                },

                Credentials = new MqttClientCredentials()
                {
                    Username ="Username",
                    Password = Encoding.UTF8.GetBytes("PassWord")
                },
                CleanSession = false,
                KeepAlivePeriod = TimeSpan.FromSeconds(65535),
                KeepAliveSendInterval = TimeSpan.FromSeconds(60),
                CommunicationTimeout = TimeSpan.FromSeconds(30)
            };


  var result = MqttClient.ConnectAsync(mqttOptions).Result;

 if (result.ResultCode == MqttClientConnectResultCode.Success)
    {

    logger.Info("连接成功");
    }
    else
    {
    logger.Info("连接失败");
    }


var result1 = MqttClient .PublishAsync("topic", "内容1", MqttQualityOfServiceLevel.AtMostOnce, false).Result;

if (result1.ReasonCode == MQTTnet.Client.Publishing.MqttClientPublishReasonCode.Success)
   {

     logger.info("发送成功");

   }else
   {
     logger.info("发送失败");
   }

 MqttClient.UseDisconnectedHandler(async e =>
                {
                    logger.Info("Disconnected >>Disconnected Server");
                    await Task.Delay(TimeSpan.FromSeconds(5));
                    try
                    {
                        await MqttClient.ConnectAsync(mqttOptions);
                    }
                    catch (Exception exp)
                    {
                        logger.Info("Disconnected >>Exception" + exp.Message);
                    }
                });


 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐