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 和 主题
- “发送” : 发布已输入的文字
主题设置页
- “+” : 添加主题
- 主题列表,长按可删除主题
运行中的首页
接口使用说明
连接
//构建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
生命周期中释放资源,避免内存泄漏。