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 = "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); } });