HarmonyOS 鸿蒙Next mqtt连接不上,有偿求最简单成功连接例子

发布于 1周前 作者 eggper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next mqtt连接不上,有偿求最简单成功连接例子

用的最新的套件,真机环境。 url前缀用wss显示连接成功,但订阅主题是没消息,而且是url乱填也是这样子,换成其它前缀都是失败,可远程有偿求救
cke_74699.png

1.新建项目

2.ohpm i @ohos/mqtt

3.在src/main/ets下新建mqtt目录,新建文件MyMqttClient.ets

import { MqttAsync, MqttClient, MqttQos, MqttSubscribeOptions } from '[@ohos](/user/ohos)/mqtt'

export class MyMqttClient {
  private mqttClient: MqttClient|null=null

  public createMqttClient() {
    let serverUrl: string ="ws://192.168.11:188" 
    let clientId: string = "clientId_panda" //'客户端,唯一就行'
    if(MqttAsync==undefined){
      console.log("1111111");
    }else{
      console.log("222222222");
    }
    // return ;

    this.mqttClient = MqttAsync.createMqtt({
      url: serverUrl,
      clientId: clientId,
      persistenceType: 1
    })
  }

  public async connectMqtt() {
    let result: boolean
    // if(this.mqttClient){
    //   console.log("1111111111111");
    // }else {
    //   console.log("2222222222222");
    // }
    if(this.mqttClient){
      await this.mqttClient.connect({
        userName: 'MQTT用户名',
        password: '连接密码',
        connectTimeout: 30,
        MQTTVersion: 0
      }).then(() => {
        result = true
        console.info('连接成功')
      }).catch(() => {
        result = false
        console.warn('连接失败')
      })
    }

  }

  public async subscribe() {
    let subscribeOption: MqttSubscribeOptions = {
      topic: '你的主题',
      qos: 0
    }
    if(this.mqttClient){
      await this.mqttClient.subscribe(subscribeOption).then((data) => {
        console.info('MQTT subscribe success ====>', JSON.stringify(data))
      }).catch((err: object) => {
        console.error('MQTT subscribe failed, Cause:', JSON.stringify(err))
      })

      this.mqttClient.messageArrived((err, data) => {
        if (err) {
          console.error('MQTT messageArrived failed, Cause:', JSON.stringify(err))
        }else {
          console.error('MQTT messageArrived success, 消息内容:', JSON.stringify(data))
        }
      })
    }

  }

  public pushMessage(pic: string, mes: string, qo: MqttQos) {
    if(this.mqttClient){
      this.mqttClient.publish({
        topic: pic,
        qos: qo,
        payload: mes
      }, (error, data) => {
        if (error) {
          console.error("Push message failed, Cause:", JSON.stringify(error))
        }else {
          console.info("Push message success", JSON.stringify(data))
        }
      })
    }

  }
  public destroy() {
    if(this.mqttClient){
      this.mqttClient.destroy().then((data) => {
        console.debug('Destroy the mqtt client', JSON.stringify(data))
      })
    }


  }
}
3 回复

例子应该没问题 ,引用的库有bug,默认安装的不是最新的库,

升级最新的包,ohpm install @ohos/mqtt@2.0.13-rc.1
修复mqttAsync_空指针问题

我成功了模拟器上,升级了DevEco Studio 5.0.1 Beta3,SDK 12。我没真机

你是模拟器可以吗,真机不行

针对HarmonyOS 鸿蒙Next mqtt连接不上的问题,以下是一个简单的成功连接例子:

  1. 安装mqtt插件

    使用三方仓库mqtt插件,安装命令:ohpm i @ohos/mqtt。

  2. mqtt函数封装

    在项目中新建一个mqtt目录,并在该目录下创建一个MyMqttClient.ets文件,进行mqtt相关函数的封装。包括创建mqtt客户端、连接mqtt服务器、订阅主题、发布消息以及销毁mqtt客户端等功能。

  3. 页面按钮调用

    在页面的ets文件中,引入MyMqttClient类,并通过按钮点击事件来调用mqtt的相关功能。例如,创建mqtt客户端、连接到服务器、订阅主题、发送消息以及销毁客户端等。

  4. 注意事项

    • 确保mqtt服务器地址和端口号正确无误。
    • 客户端ID需要唯一。
    • 连接时需要提供正确的用户名和密码(如果mqtt服务器需要认证的话)。
    • 订阅的主题需要存在,且客户端有权限订阅。

如果遵循以上步骤仍无法连接,请检查网络设置、服务器状态以及代码实现是否有误。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部