Flutter MQTT客户端的集成

转自:https://blog.csdn.net/weixin_44042238/article/details/100376563  

1.库 https://pub.dev/packages/mqtt_client
2.在pubspec.yaml文件中依赖mqtt_client: ^5.5.4

关键API

  • MqttClient客户端的初始化
//server 服务器地址
//clientIdentifier 客户端标识 (具有唯一性,如果两个客户端有相同的标识则两个客户端无法同时连接到服务器)
//port 端口
MqttClient.withPort(this.server, this.clientIdentifier, this.port);
  • 连接
//用户名跟密码 可选参数
Future<MqttClientConnectionStatus> connect([String username, String password])
  • 订阅一个主题
//topic 需订阅的主题
//qosLevel 常用三种类型 atMostOnce atLeastOnce exactlyOnce
Subscription subscribe(String topic, MqttQos qosLevel) 
  • 发布一个主题
//topic 发布的消息所属的主题
//qualityOfService 跟上面的 qosLevel 一样
//data 所需要发送的数据 
//retain 不知道
 int publishMessage(String topic, MqttQos qualityOfService, typed.Uint8Buffer data,{bool retain = false})
  • 消息回调
    当接收到消息的时候会在这里给出通知
Stream<List<MqttReceivedMessage<MqttMessage>>> updates;
  • 开撸
import 'package:mqtt_client/mqtt_client.dart';
import 'package:typed_data/typed_buffers.dart';

class Mqtt {
  String server = 服务器地址;
  int port=端口号;
  String clientIdentifier=客户端标识;
  String subTopic = 需要订阅的topic;
  String publishTopic= 发送消息的topic;
  MqttQos qos = MqttQos.atLeastOnce;
  MqttClient mqttClient;
  static Mqtt _instance;

  Mqtt._() {

    mqttClient = MqttClient.withPort(server, clientIdentifier, port);

    ///连接成功回调
    mqttClient.onConnected = _onConnected;

    ///连接断开回调
    mqttClient.onDisconnected = _onDisconnected();

    ///订阅成功回调
    mqttClient.onSubscribed = _onSubscribed;

    ///订阅失败回调
    mqttClient.onSubscribeFail = _onSubscribeFail;

  }

  static Mqtt getInstance() {
    if (_instance == null) {
      _instance = Mqtt._();
    }
    return _instance;
  }
  ///连接
  connect() {
    mqttClient.connect();
    _log("connecting");
  }
  ///断开连接
  disconnect() {
    mqttClient.disconnect();
    _log("disconnect");
  }

  ///发布消息
  publishMessage(String msg) {
    ///int数组
    Uint8Buffer uint8buffer = Uint8Buffer();
    ///字符串转成int数组 (dart中没有byte) 类似于java的String.getBytes?
    var codeUnits = msg.codeUnits;
    //uint8buffer.add()
    uint8buffer.addAll(codeUnits);
    mqttClient.publishMessage(publishTopic, qos, uint8buffer);
  }

  ///消息监听
  _onData(List<MqttReceivedMessage<MqttMessage>> data) {
    Uint8Buffer uint8buffer = Uint8Buffer();
    var messageStream = MqttByteBuffer(uint8buffer);
    data.forEach((MqttReceivedMessage<MqttMessage> m) {
      ///将数据写入到messageStream数组中
      m.payload.writeTo(messageStream);
      ///打印出来
      print(uint8buffer.toString());
    });
  }

  _onConnected() {
    _log("_onConnected");
    ///连接成功的时候订阅消息
    mqttClient.subscribe(subTopic, qos);
  }

  _onDisconnected() {
    _log("_onDisconnect");
  }

  _onSubscribed(String topic) {
    _log("_onSubscribed");
    ///在订阅成功的时候注册消息监听
    mqttClient.updates.listen(_onData);
  }
  
  _onSubscribeFail(String topic) {
    _log("_onSubscribeFail");
  }


  _log(String msg) {
    print("MQTT-->$msg");
  }
}

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值