当前位置: 首页 > news >正文

鸿蒙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)


http://www.mrgr.cn/news/3137.html

相关文章:

  • 网优学习干货:2.6G仿真操作(1)
  • 全新分支版本!微软推出Windows 11 Canary Build 27686版
  • Java编程中接口与实现分离的七种关键技术和设计模式
  • 如何使用Python Flask构建地震爬虫预测系统?
  • 【Java Lambda系列】新玩法,用Lambda重构设计模式
  • 个人收藏个性化、实用性、可玩性在线网站持续更新,与君共享
  • 深度分析html,web的rtsp,rtmp无插件超低延时播放器
  • Git——命令集合
  • SQL - 视图
  • 超声波俱乐部:AI创始人啤酒之夜
  • Qt 0821作业
  • B2.12 缓存和内存层次结构
  • pandas and sqlalchemy compatibility
  • 微课录制不再难:精选三款录屏软件助你一臂之力
  • API 接口选择那个?RESTful、GraphQL、gRPC、WebSocket、Webhook
  • 计算机网络中的 CDN 与内容分发网络
  • 采用先进的人工智能视觉分析技术,能够精确识别和分析,提供科学、精准的数据支持的智慧物流开源了。
  • (10)女生如何面对男生提供的情绪价值
  • C++ TinyWebServer项目总结(7. Linux服务器程序规范)
  • Kafka基本概念