ToB企服应用市场:ToB评测及商务社交产业平台

标题: MQTTnet4入门(二)实现客户端 [打印本页]

作者: 篮之新喜    时间: 2023-8-30 03:39
标题: MQTTnet4入门(二)实现客户端
上一篇写服务端的文章《MQTTnet4入门(一)实现服务端》已经是去年年底,现在MQTTnet的版本是4.2.1.781,总的来说改动不大。下面以新版为例实现一个客户端。
  1. var mqttClientOptions = new MqttClientOptionsBuilder()
  2.             .WithTcpServer("地址", 端口)
  3.             .WithClientId("我是客户端名称")//连接id
  4.             .WithCredentials("demo","123456")//如果有用户名密码
  5.             .WithTls()//如果启用了ssl/tls
  6.             .WithProtocolVersion(MqttProtocolVersion.V500)//如果用mqtt5
  7.             .Build();//配置
  8.         IMqttClient client = new MqttFactory().CreateMqttClient();//创建连接
  9.         client.ApplicationMessageReceivedAsync += MqttClient_ApplicationMessageReceivedAsync;//收到消息的事件
  10.         client.ConnectedAsync += Client_ConnectedAsync;//连接成功的事件
  11.         client.ConnectingAsync += Client_ConnectingAsync;//连接中的事件
复制代码
配置里面一个大坑害我调了一个小时,如果mqtt服务端需要用户名和密码,那么使用.WithCredentials()来填写。我一直以为是.WithUserProperty(),极有迷惑性。
连接并订阅主题:
  1. while (true)
  2. {
  3.     try
  4.     {
  5.         if (!await client.TryPingAsync())
  6.         {
  7.             await client.ConnectAsync(mqttClientOptions, CancellationToken.None);
  8.             var mqttSubscribeOptions = new MqttFactory().CreateSubscribeOptionsBuilder()
  9.                 .WithTopicFilter(
  10.                 f =>
  11.                 {
  12.                     f.WithTopic("shi");//订阅主题
  13.                 })
  14.                 .Build();
  15.             await client.SubscribeAsync(mqttSubscribeOptions);
  16.         }
  17.     }
  18.     catch
  19.     {
  20.         // 错误
  21.     }
  22.     finally
  23.     {
  24.         // 每5秒检查一次连接状态,连接失败重连
  25.         await Task.Delay(TimeSpan.FromSeconds(5));
  26.     }
  27. }
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4