解决flutter使用MQTT发送请求,无法监听到主题发送的消息数据的问题

我看了很多flutter使用MQTT的文章,并使用官方给出的使用步骤,用官方的测试的URL是可以接收和发送数据的.但是使用公司的URL就无法收到消息,控制台一直打印报错.

arduino 复制代码
mqtt-client::ConnectionException: The connection must be in the Connected state in order to perform this operation
arduino 复制代码
MqttConnectionKeepAlive::pingRequired - NOT sending ping - not connected

因为客户端与MQTT服务端没有成功建立连接,导致后续操作就一直报错, 我用这些报错信息,搜索了一圈下来,完全找不到解决答案,我使用的MQTT插件是:mqtt_client: ^10.0.0,我下载了一个MQTT的客户端软件安装到Mac上方便调试.MQTTX在这个工具中,创建一个连接,输入测试用的mqtt

这里的MQTT的版本最好和代码里面的一致.选择版本是3.1.1,5.0的版本我看插件的源码里有些API是不支持的.

ini 复制代码
import 'package:mqtt_client/mqtt_client.dart';
import 'package:mqtt_client/mqtt_server_client.dart';

MqttServerClient client = MqttServerClient.withPort(
    "ws://172.16.14.201:8083/mqtt", 'flutter_client', "8083");
  client.logging(on: true);
  client.useWebSocket = true;
  client.autoReconnect = true;
  client.keepAlivePeriod = 60;
  client.connectTimeoutPeriod = 5000;
  client.onConnected = onConnected;
  client.onDisconnected = onDisconnected;
  client.onUnsubscribed = onUnsubscribed;
  client.onSubscribed = onSubscribed;
  client.onSubscribeFail = onSubscribeFail;
  client.pongCallback = pong;

  final connMess = MqttConnectMessage()
      .withWillTopic('willtopic')
      .withWillMessage('My Will message')
      .startClean()
      .withWillQos(MqttQos.atLeastOnce);
  client.connectionMessage = connMess;
  try {
    debugPrint('Connecting');
    await client.connect();
  } catch (e) {
    debugPrint('Exception: $e');
    client.disconnect();
  }

我在调试的过程中,踩了两个坑,一是url,没有填完成,我写成了"172.16.14.201:8083/mqtt"缺少了"ws://",其次是端口号写错了.这点官方是有解释的.

diff 复制代码
-   Broker: broker.emqx.io
-   TCP Port: 1883
-   Websocket Port: 8083

因为这两个地方写错了,导致一直无法建立连接. 还有就是MQTT对象的生命周期维护,最开始是通过Future异步返回一个MQTT对象,但是在主页面监听时,这个mqtt对象的生命周期已经结束了,导致对象一直是NULL,所以也无法建立连接.解决办法是尽量使这个mqtt对象是一个全局的.当然pop后断开连接,MQTT对象也释放掉. 注意以上这几点,应该是可以成功订阅\监听消息的.

相关推荐
松叶似针1 小时前
Flutter三方库适配OpenHarmony【doc_text】— OpenHarmony 插件工程搭建与配置文件详解
flutter
阿林来了1 小时前
Flutter三方库适配OpenHarmony【flutter_web_auth】— OAuth2 协议基础与认证流程拆解
flutter
早點睡3902 小时前
Harmony Flutter 跨平台开发实战:鸿蒙与音乐律动艺术、贝塞尔流体律动:三阶贝塞尔曲线的“呼吸“感
flutter
2501_921930832 小时前
进阶实战 Flutter for OpenHarmony:响应式状态机系统 - 复杂状态流转实现
flutter
松叶似针3 小时前
Flutter三方库适配OpenHarmony【doc_text】— Word 文档格式深度科普:从 OLE2 到 OOXML
flutter·harmonyos
空白诗3 小时前
Harmony Flutter 跨平台开发实战:鸿蒙与音乐律动艺术、粒子系统与流体模拟:动态粒子的视觉盛宴
flutter·harmonyos
空白诗3 小时前
Harmony Flutter 跨平台开发实战:鸿蒙与音乐律动艺术、混沌理论与奇异吸引子:从洛伦兹到音乐的动态艺术
flutter·harmonyos
2501_921930834 小时前
进阶实战 Flutter for OpenHarmony:高性能列表虚拟化系统 - 大数据量渲染优化实现
flutter
2501_921930834 小时前
进阶实战 Flutter for OpenHarmony:自定义渲染引擎系统 - RenderObject 底层绘制实现
flutter
早點睡3905 小时前
Harmony Flutter 跨平台开发实战:鸿蒙与音乐律动艺术、粒子物理引力场:万有引力与排斥逻辑
flutter·华为·harmonyos