欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 鸿蒙UDP封装及使用

鸿蒙UDP封装及使用

2024/10/24 14:24:19 来源:https://blog.csdn.net/m0_60880588/article/details/141265447  浏览:    关键词:鸿蒙UDP封装及使用

一.封装

import { socket } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { util } from '@kit.ArkTS';//执行UDP通讯的对象
let udpSocket:socket.UDPSocket= socket.constructUDPSocketInstance();
// 连接成功变量
let bindSuccess = false
export class UDPUtils {//ArrayBuffer转utf8字符串buf2String(buf: ArrayBuffer) {let msgArray = new Uint8Array(buf);let textDecoder = util.TextDecoder.create("utf-8");return textDecoder.decodeWithStream(msgArray)}startHeart(address:string,port:number){setInterval(()=>{if(bindSuccess){let remoteAddress:socket.NetAddress = { address: address, port: port, family: 1 }udpSocket.send({ data: '心跳', address: remoteAddress }).then(async () => {console.log('心跳')// this.msgHistory += "我:" +'心跳' + await getCurrentTimeString() + "\r\n"}).catch((e:BusinessError) => {console.log('发送失败')// this.msgHistory += '发送失败' + e.message + "\r\n";})}},3000)}/*** 绑定地址端口* @param address:服务器ip* @returns prot:端口号*/async bind2Port(address:string,prot:number) {// await udpSocket.close()//   .then(() => {//     // this.bindSuccess= true//     console.log('注销成功');//   }).catch((err: BusinessError) => {//     console.log('注销失败');//   });//本地地址let localAddress:socket.NetAddress = { address: address, port: prot, family: 1 }await udpSocket.bind(localAddress).then(() => {bindSuccess = trueconsole.log('连接成功')}).catch((e:BusinessError) => {console.log('连接失败')})//收到消息时的处理udpSocket.on("message", async (value:socket.SocketMessageInfo)=> {// 发送的消息let msg = this.buf2String(value.message)// iplet remoteIP:string = value.remoteInfo.address//端口let remotePort:string = value.remoteInfo.port.toString()//对端ip地址和端口的字符串形式let remoteAddr:string = "[" + remoteIP + ":" + remotePort + "]:"let msgHistory:string =  remoteAddr + msg  + "\r\n"console.log('接收的消息:',msgHistory)return msgHistory})}/*** 发送消息* @param sendMsg:需要发送的消息* @param address:服务器ip* @param prot:   端口号*/sendMsg2Target(sendMsg:string,address:string,prot:number) {//目的ip和端口let remoteAddress:socket.NetAddress = { address: address, port: prot, family: 1 }udpSocket.send({ data: sendMsg, address: remoteAddress }).then(async () => {console.log('发送的消息:',sendMsg)}).catch((e:BusinessError) => {console.log('发送失败:',e.message)})}
}

二.使用

  this.UDPUtils.bind2Port("0.0.0.0",9990)// 心跳this.UDPUtils.startHeart("0.0.0.0",9990)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com