HarmonyOS 鸿蒙Next UDPSocket通信实践分享
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
更多关于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