HarmonyOS 鸿蒙Next UDPSocket通信实践分享

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next UDPSocket通信实践分享

前提条件

本文适用于通过UDPSocket与第三方设备通信且通过wifi连接的前提条件下

导入模块

import { socket } from ‘@kit.NetworkKit’;

绑定设备

先连接设备wifi与设备建立通道,通过socket.constructUDPSocketInstance()创建UDPSocket对象,通过bind绑定设备,建立联系

let udp: socket.UDPSocket = socket.constructUDPSocketInstance();

let bindAddr: socket.NetAddress = {

   address: ‘0.0.0.0’,//默认

   port: XXX//设备端口

}

udp.bind(bindAddr, (err: BusinessError) => {

  if (err) {

     console.log(‘bind fail’);

     return;

   }

});

订阅消息

在向设备发送消息前先订阅设备返回的消息,通过on(‘message’)

udp.on(‘message’, (value: socket.SocketMessageInfo) => {//官方示例

for (let i: number = 0; i < value.message.byteLength; i++) {//此数据处理只适合接收到设备发送的原始数据为对象时

let uint8Array = new Uint8Array(value.message)

let messages = uint8Array[i]

let message = String.fromCharCode(messages);

messageView += message;

}

 });

注意:当设备返回原始消息内容为图片、数字标识、数值数组等无需用上述示例中转换为字符串拼接的形式处理,而是根据原始数据位数决定用Uint8Array、Uint16Array、Uint32Array直接转换

例如:let uint8Arr = new Uint8Array(value.message);

let Data = Array.from(uint8Arr);

发送消息

可通过wifiManager.getIpInfo()获取设备IP或者网关(看情况)与端口,通过send向设备发送消息

let ipInfo: wifiManager.IpInfo = wifiManager.getIpInfo()

let address = this.getIpNum(ipInfo.gateway)

let netAddress: socket.NetAddress = {

address,

port: XXX//与设备约定

}

let sendOptions: socket.UDPSendOptions = {

    data: ‘Hello, server!’,

    address: netAddress

}

udp.send(sendOptions, (err: BusinessError) => {//发送消息

if (err) { 

console.log(‘send fail’);

return;

}

console.log(‘send success’);

});

//转换数字形式的ip地址为字符串形式

getIpNum(num: number): string {  

      return (num >>> 24) + ‘.’ + (num >> 16 & 0xFF) + ‘.’ + (num >> 8 & 0xFF) + ‘.’ + (num & 0xFF);

}

注意:发送数据类型只支持字符串类型与ArrayBuffer类型,当需要发送数组、对象等数据时,可以用buffer.from转换成ArrayBuffer类型数据发送

断开连接

通过调用udp.close()断开与设备的连接

udp.close().then(() => {

console.log(‘close success’);

}).catch((err: BusinessError) => {

console.log(‘close fail’);

});


更多关于HarmonyOS 鸿蒙Next UDPSocket通信实践分享的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next UDPSocket通信实践分享的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中进行Next UDPSocket通信实践,核心在于利用鸿蒙提供的网络API接口来实现UDP数据包的发送与接收。

首先,需要初始化网络模块,并创建UDP Socket套接字。通过调用鸿蒙系统提供的网络库函数,如Socket(),指定使用UDP协议(通常为SOCK_DGRAM),来创建一个UDP套接字。

创建成功后,使用Bind()函数将套接字绑定到指定的本地地址和端口,以便接收来自网络的数据包。若需要向其他主机发送数据,则使用Connect()函数指定目标地址和端口,或直接使用SendTo()函数发送数据,同时指定目标地址和端口。

接收数据时,调用RecvFrom()函数,该函数会阻塞等待直到接收到数据包,然后返回数据包内容及发送方的地址信息。

注意,在进行网络通信时,务必处理好异常和错误情况,如网络不可达、端口被占用等,确保程序的健壮性。

此外,由于UDP是无连接的协议,不保证数据包的顺序和完整性,因此在设计应用时需考虑这些因素,可能需要在应用层实现重传、校验等机制。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部