- A+
所属分类:.NET技术
上一篇写服务端的文章《MQTTnet4入门(一)实现服务端》已经是去年年底,现在MQTTnet的版本是4.2.1.781,总的来说改动不大。下面以新版为例实现一个客户端。
var mqttClientOptions = new MqttClientOptionsBuilder() .WithTcpServer("地址", 端口) .WithClientId("我是客户端名称")//连接id .WithCredentials("demo","123456")//如果有用户名密码 .WithTls()//如果启用了ssl/tls .WithProtocolVersion(MqttProtocolVersion.V500)//如果用mqtt5 .Build();//配置 IMqttClient client = new MqttFactory().CreateMqttClient();//创建连接 client.ApplicationMessageReceivedAsync += MqttClient_ApplicationMessageReceivedAsync;//收到消息的事件 client.ConnectedAsync += Client_ConnectedAsync;//连接成功的事件 client.ConnectingAsync += Client_ConnectingAsync;//连接中的事件
配置里面一个大坑害我调了一个小时,如果mqtt服务端需要用户名和密码,那么使用.WithCredentials()
来填写。我一直以为是.WithUserProperty()
,极有迷惑性。
连接并订阅主题:
while (true) { try { if (!await client.TryPingAsync()) { await client.ConnectAsync(mqttClientOptions, CancellationToken.None); var mqttSubscribeOptions = new MqttFactory().CreateSubscribeOptionsBuilder() .WithTopicFilter( f => { f.WithTopic("shi");//订阅主题 }) .Build(); await client.SubscribeAsync(mqttSubscribeOptions); } } catch { // 错误 } finally { // 每5秒检查一次连接状态,连接失败重连 await Task.Delay(TimeSpan.FromSeconds(5)); } }