HarmonyOS鸿蒙Next ArkTS实现MQTT协议(2)

HarmonyOS鸿蒙Next ArkTS实现MQTT协议(2) 上一篇:链接

软件说明

  • 协议传输通道仅为TCPSocket
  • 基于HarmonyOS SDK API 9开发
  • 开发语言:ArkTS,TypeScript

工程结构

├── ets
│   ├── entryability
│   │   └── EntryAbility.ts
│   └── pages
│       ├── Index.ets
│       └── mqtt
│           ├── common
│           │   ├── MQTTCommon.ts //MQTT命令常量
│           │   ├── MQTTDataTypes.ts //MQTT数据编解码
│           │   └── MQTTLogger.ts //日志打印
│           ├── model
│           │   ├── ChatItem.ets
│           │   ├── MQTTPacketStruct.ts //数据包结构体
│           │   ├── MQTTReqResStruct.ts //发送请求结构
│           │   └── VariableByteInteger.ts //可变字节结构
│           ├── mqttcommand //MQTT协议命令
│           │   ├── MQTTAUTH.ts
│           │   ├── MQTTConnect.ts
│           │   ├── MQTTConnectACK.ts
│           │   ├── MQTTDisConnect.ts
│           │   ├── MQTTPing.ts
│           │   ├── MQTTPingACK.ts
│           │   ├── MQTTPublish.ts
│           │   ├── MQTTPublishACK.ts
│           │   ├── MQTTPublishCOMP.ts
│           │   ├── MQTTPublishREC.ts
│           │   ├── MQTTPublishREL.ts
│           │   ├── MQTTSubscribe.ets
│           │   ├── MQTTSubscribeACK.ts
│           │   ├── MQTTUnsubscribe.ts
│           │   ├── MQTTUnsubscribeACK.ts
│           │   └── PacketID.ts
│           ├── networkchannel
│           │   └── HarmonyOSSocket.ets //Socket 
│           ├── page //测试页面
│           │   ├── HarveyMqtt.ets //入口页
│           │   └── HarveyMqttSettings.ets //设置页
│           └── view //测试页面组件
│               └── ViewMQTTPacket.ets
├── module.json5
└── resources

应用操作说明

测试首页

  • “连接” : 用于连接远端服务器。具备“连接 & 断开” 两个功能
  • “设置” : 用于添加更多主题
  • “订阅” & “解除” : 仅用于默认主题“Harvey2024”
  • “发布” : 发布消息前,用来设置消息QoS 和 主题
  • “发送” : 发布已输入的文字

主题设置页

  • “+” : 添加主题
  1. 主题列表,长按可删除主题

运行中的首页

接口使用说明

连接

//构建MQTT CONNECT参数
let CMD = MQTTConnect.create()
  .setClientIdentifier('Harvey鸿蒙') //客户端名字
  .buildPacket()

//配置Socket并且完成连接
HarmonyOSSocket.get()
  .socketCfg({
    address: {
      address: this.sec1IP + "." + this.sec2IP + "." + this.sec3IP + "." + this.sec4IP,
      port: 1883
    }
  },
  )
  .connectCfg(CMD)
  .connect()

订阅主题

let options: SubscribeTopicNameOptions[] = [
  { topicName: this.currentPublishTopicName} //主题名称
]

HarmonyOSSocket.get().subscribeTopic(options)

发布消息

//构建MQTT PUBLISH参数
let publishConfig = MQTTPublish.create()
  .setQoS(this.currentPublishQoS) 
  .setTopicName(this.currentPublishTopicName)

HarmonyOSSocket.get()
               .publishCfg(publishConfig)
               .sendMessageByString(this.inputMessage)

消息监听

//错误信息
getContext().eventHub.on(MQTTCommon.EVENTHUB_MQTT_APP_ERROR_MSG, (value) => {
  this.errorMessage = value
})

// 
getContext().eventHub.on(MQTTCommon.EVENTHUB_MQTT_CMD_STATUS_MSG, (msg) => {
  if (msg.action === 'connect') { //MQTT CONNECT结果消息
    if (msg.value == 0) {
       //成功
    } else {
      Prompt.showToast({ message: '连接失败' })
    }

  } else if (msg.action === 'close') {
    //1. TCPSocket 关闭事件
    //2. MQTT 断开命令已发送完毕

  } else if (msg.action == 'subscribeack') {

    //订阅主题结果 
    let packet = msg.value as MQTTPacketStruct

  } else if (msg.action == 'unsubscribeack') {

    //解除主题订阅结果 
    let packet = msg.value as MQTTPacketStruct

  } else if (msg.action == 'publish-s-to-c') {

    //收到服务端数据包,即 接收到消息
    let packet = msg.value as MQTTPacketStruct

  } else if (msg.action == 'publish-c-to-s') {

    //客户端发送给服务端数据包
    let packet = msg.value as MQTTPacketStruct

  }
})

断开服务

HarmonyOSSocket.get().disconnect()

结束

链接

祝好运!


更多关于HarmonyOS鸿蒙Next ArkTS实现MQTT协议(2)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

求分享源代码,谢谢!!

更多关于HarmonyOS鸿蒙Next ArkTS实现MQTT协议(2)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


求源文件

您好,请问文章末尾给出的项目地址可以开放访问权限吗?

gitte上私信过来,晚上给你开通,

您好,这个项目我也打不开,可以开发访问权限吗?

在HarmonyOS鸿蒙Next中使用ArkTS实现MQTT协议,首先需要引入MQTT库,如paho-mqtt。通过MQTTClient类创建客户端实例,设置服务器地址、端口及客户端ID。使用connect方法连接到MQTT代理,并通过subscribe方法订阅主题。通过publish方法发布消息到指定主题。在onMessageArrived回调中处理接收到的消息。最后,使用disconnect方法断开连接。确保在onDestroy生命周期中释放资源,避免内存泄漏。

回到顶部