54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接收发测试

工程代码icon-default.png?t=N7T8https://download.csdn.net/download/txwtech/89258409?spm=1001.2014.3001.5501

54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接收发测试

import socket from '@ohos.net.socket';
import process from '@ohos.process';
import wifiManager from '@ohos.wifiManager';import common from '@ohos.app.ability.common';
import StringUtils from './uint8array2string';
import StringUtils2 from '../http2/uint8array2string_test'let tcp = socket.constructTCPSocketInstance();//let ipAddress = wifiManager.getIpInfo().ipAddress; //真机测试
//let local_ip2 = (ipAddress>>24 &0xFF)+"."+(ipAddress>>16 &0xFF)+"."+(ipAddress>>8 &0xFF)+"."
//+(ipAddress &0xFF) //真机测试
let local_ip2 = '10.0.2.16' //用于模拟器,真机则屏蔽此处
let tcp_on_msg = ''@Entry
@Component
struct Index {@State message: string = 'Hello World'@State local_ip:string = local_ip2@State local_port:number =6666@State ip_addr:string ='192.168.10.104'@State port:number =8080@State send_msg:string ='send content'@State recv_msg:string =''build() {Column() {Row(){Text(' ')}Row(){Text('TCP socket测试连接').fontSize(38).fontColor(Color.White).backgroundColor(Color.Blue)}Row(){Text('本机IP:').fontSize(28).backgroundColor(Color.Green)TextInput({text:`${this.local_ip}`}).fontSize(28).width(280).backgroundColor(Color.Transparent).onChange((value:string)=>{this.local_ip = value})}Row(){Text('端口:').fontSize(28).backgroundColor(Color.Green)TextInput({text:`${this.local_port}`}).fontSize(28).width(280).backgroundColor(Color.Transparent).onChange((value:string)=>{this.local_port = parseInt(value, 10); //字符转数字})}Row(){Text('服务器IP:').fontSize(28).backgroundColor(Color.Green)TextInput({text:`${this.ip_addr}`}).fontSize(28).width(280).backgroundColor(Color.Transparent).onChange((value:string)=>{this.ip_addr = value})}Row(){Text('端口:').fontSize(28).backgroundColor(Color.Green)TextInput({text:`${this.port}`}).fontSize(28).width(280).backgroundColor(Color.Transparent).onChange((value:string)=>{this.port = parseInt(value, 10); //字符转数字})}Row(){Text('发送:').fontSize(28)}.align(Alignment.Start)Row(){TextArea({text:`${this.send_msg}`}).fontSize(28).height(100).onChange((value:string)=>{this.send_msg = value})}Row(){Text('接收:').fontSize(28)}.align(Alignment.Start)Row(){TextArea({text:`${this.recv_msg}`}).fontSize(28) //文本自动换行.height(200).onChange((value:string)=>{this.recv_msg = value})}Row(){Button('连接').width(100).fontSize(28).onClick(() => {// 绑定IP地址和端口。//连接服务器,必须首先绑定本机IPlet bindAddress = {address: this.local_ip,port: this.local_port, // 绑定端口,如1234family: 1};tcp.bind(bindAddress, err => {if (err) {console.log('bind fail_local');this.recv_msg = 'connect fail_local,IP:'+this.local_ipreturn;}console.log('bind success_local');this.recv_msg = 'connect fail_local,IP:'+this.local_ip})let connectAddress = {address: this.ip_addr,port: this.port, // 连接端口,如5678family: 1};tcp.connect({address: connectAddress, timeout: 3000},err=>{if (err) {console.log('connect fail_remote');this.recv_msg = 'connect fail_remote,IP:'+this.ip_addrreturn;}console.log('connect success');this.recv_msg = 'connect success_remote,IP:'+this.ip_addr})tcp.on('message', value => {console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo)this.recv_msg = this.recv_msg+StringUtils.arrayBuffer2String(value.message);});})Button('______').onClick((event: ClickEvent) => {})Button('发送').width(100).fontSize(28).onClick((event: ClickEvent) => {tcp.send({data: this.send_msg}, err => {if (err) {console.log('send fail');this.recv_msg='send fail_remote'return;}console.log('send success');this.recv_msg='send success_remote';})})}Row(){Button('退出').width(100).fontSize(28).onClick((event: ClickEvent) => {tcp.close();const context = getContext(this) as common.UIAbilityContext;context.terminateSelf();let applicationContext = context.getApplicationContext();// applicationContext.killProcessesBySelf().// then((data)=>// {console.log('The process running information is:'+ JSON.stringify(data));})//   .catch((error)=>{console.error('error:'+ JSON.stringify(error));})// process.kill(0, process.pid)// process.exit(0)})}}.width('100%').padding(20) //边距.backgroundColor(Color.Gray)}
}

配置权限:

arkts获取真机本机IP:

连接远程服务器,tcp/ip,必须绑定本机IP

import StringUtils from './uint8array2string';

uint8array2string.ts

import util from '@ohos.util';class StringUtils {/*** string转Uint8Array* @param value* @returns*/string2Uint8Array1(value: string): Uint8Array {if (!value) return null;//let textEncoder = new util.TextEncoder();//获取点流并发出 UTF-8 字节流 TextEncoder 的所有实例仅支持 UTF-8 编码return textEncoder.encodeInto(value)}/*** string转Uint8Array* @param value 包含要编码的文本的源字符串* @param dest 存储编码结果的Uint8Array对象实例* @returns 它返回一个包含读取和写入的两个属性的对象*/string2Uint8Array2(value: string, dest: Uint8Array) {if (!value) return null;if (!dest) dest = new Uint8Array(value.length);let textEncoder = new util.TextEncoder();//read:它是一个数值,指定转换为 UTF-8 的字符串字符数。如果 uint8Array 没有足够的空间,这可能小于 src.length(length of source 字符串)。//dest:也是一个数值,指定存储在目标 Uint8Array 对象 Array 中的 UTF-8 unicode 的数量。它总是等于阅读。textEncoder.encodeIntoUint8Array(value, dest)// let result = textEncoder.encodeIntoUint8Array(value, dest)// result.read// result.written}/*** Uint8Array 转  String* @param input*/uint8Array2String(input: Uint8Array) {let textDecoder = util.TextDecoder.create("utf-8", { ignoreBOM: true })return textDecoder.decodeWithStream(input, { stream: false });}/*** ArrayBuffer 转  String* @param input* @returns*/arrayBuffer2String(input: ArrayBuffer) {return this.uint8Array2String(new Uint8Array(input))}
}export default new StringUtils()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql 中having和where区别

where 是用于筛选表中满足条件的行,不可以和聚类函数一起使用 having 是用于筛选满足条件的组 ,可与聚合函数一起使用 所以having语句中不能使用select中定义的名字

51单片机软件环境安装

keli5的安装 把CID放到破解程序中 破解程序会给一串数字然后填到那个框中 驱动程序的安装 安装完了以后 设备管理器会出现这个 同时c盘会出现这个文件夹

Flask教程3:jinja2模板引擎

文章目录 模板的导入与使用 模板的导入与使用 Flask通过render_template来实现模板的渲染,要使用这个方法,我们需要导入from flask import rander_template,模板中注释需放在{# #}中 模板的第一个参数为指定的模板文件名称,如自定…

Rust Rocket创建第一个hello world的Web程序 Rust Rocket开发常用网址和Rust常用命令

一、Rust Rocket简介 Rust Rocket 是一个用 Rust 语言编写的 Web 应用框架,它结合了 Rust 的安全性和性能优势,以及 Web 开发的便利性。以下是 Rust Rocket 框架的一些优点: 安全性:Rust 是一种注重安全性的编程语言,…

【C++】学习笔记——vector_2

文章目录 七、vector2. vecotr的使用3. vector的模拟实现 未完待续 七、vector 2. vecotr的使用 上节我们以二维数组结束&#xff0c;这一节我们以二维数组开始。 // 二维数组 vector<vector<int>> vv;二维数组在底层是连续的一维数组。vv[i][j] 是怎样访问的&a…

分布式与一致性协议之一致哈希算法(二)

一致哈希算法 使用哈希算法有什么问题 通过哈希算法&#xff0c;每个key都可以寻址到对应的服务器&#xff0c;比如&#xff0c;查询key是key-01,计算公式为hash(key-01)%3,警告过计算寻址到了编号为1的服务器节点A&#xff0c;如图所示。 但如果服务器数量发生变化&#x…

vue3使用el-autocomplete请求远程数据

服务器端 RestController RequestMapping("/teacher") public class TeacherController {Resourceprivate TeacherService teacherService;GetMapping({"/v1/getTop10TeacherByName/","/v1/getTop10TeacherByName/{name}"})public ResultBean&l…

快速批量重命名文件(夹)

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 我这里处理这4个文本&#xff0c;实际可以处理任意数量的文本和文件夹 1、打开工具&#xff0c;进入文件批量复制版块 2、点击“重命名” 3、把要重命名的…

使用Python爬取淘宝商品并做数据分析

使用Python爬取淘宝商品并做数据分析&#xff0c;可以按照以下步骤进行操作&#xff1a; 确定需求&#xff1a;确定要爬取的淘宝商品的种类、数量、关键词等信息。 编写爬虫程序&#xff1a;使用Python编写爬虫程序&#xff0c;通过模拟浏览器请求&#xff0c;获取淘宝商品的页…

Docker 中的 Nginx 服务为什么要启用 HTTPS

一安装容器 1 安装docker-20.10.17 2 安装所需的依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm23 添加Docker官方仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo4 安装Docker CE 20.10.17 s…

第182期 23ai:惊喜的全功能缓存True Cache-2安装部署(20240505)

数据库管理182期 2024-05-05 数据库管理-第182期 23ai:惊喜的全功能缓存True Cache-2安装部署&#xff08;20240505&#xff09;1 主机配置2 操作系统配置2.1 基础配置2.2 配置hosts2.3 安装preinstall RPM包2.4 创建目录2.5 配置环境变量 3 部署数据库3.1 部署DB软件3.2 创建监…

机器学习:基于K-近邻(KNN)、高斯贝叶斯(GaussianNB)、SVC、随机森林(RF)、梯度提升树(GBDT)对葡萄酒质量进行预测

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

linux上如何排查JVM内存过高?

怎么排查JVM内存过高&#xff1f; 前言&#xff1a; 想必工作一两年以后的同学都会逐渐面临到&#xff0c;jvm等问题&#xff0c;但是可能苦于无法熟练的使用一些工具&#xff1b;本文将介绍几个比较常用分析工具的使用方法&#xff0c;带着大家一步步定位分析问题。 1、top 查…

springmvc下

第二类初始化操作 multipartResolver应用 localeResolver应用 themeResolver应用 handlerMapping应用 handlerAdapter应用 handlerExceptionReslver requestToViewNameTranslator应用 viewResolver应用 flashMapManager应用 dispatcherServlet逻辑处理 processRequest处理web请…

目标跟踪—卡尔曼滤波

目标跟踪—卡尔曼滤波 卡尔曼滤波引入 滤波是将信号中特定波段频率滤除的操作&#xff0c;是抑制和防止干扰的一项重要措施。是根据观察某一随机过程的结果&#xff0c;对另一与之有关的随机过程进行估计的概率理论与方法。 历史上最早考虑的是维纳滤波&#xff0c;后来R.E.卡…

【C语言】分支和循环(上)

【C语言】分支和循环&#xff08;上&#xff09; 1、if语句1.2 else1.3分支中包含多条语句1.4嵌套if1.5悬空else问题 2、关系操作符3、条件操作符4、逻辑操作符&#xff1a;与、或、非&#xff08;取反&#xff09;&#xff08;&&&#xff0c;||&#xff0c;&#xff0…

小猪APP分发平台 – 掌握移动应用的推广新途径

在移动互联网高速发展的背景下小猪APP分发平台 – 掌握移动应用的推广新途径&#xff0c;app分发已成为开发者和企业关注的重点。小猪APP分发平台作为行业内的新星小猪APP分发平台 – 掌握移动应用的推广新途径&#xff0c;提供了一个创新且高效的方式帮助开发者推广他们的应用…

ZOC8 for Mac v8.08.1激活版:卓越性能的SSH客户端

在远程连接和管理的世界中&#xff0c;ZOC8 for Mac以其卓越的性能和丰富的功能&#xff0c;成为了众多专业人士的首选SSH客户端。它支持SSH1、SSH2、Telnet、Rlogin、Serial等多种协议&#xff0c;让您轻松连接到远程服务器。ZOC8拥有简洁直观的界面和强大的功能设置&#xff…

SQL 基础 | JOIN 操作介绍

在SQL中&#xff0c;JOIN是一种强大的功能&#xff0c;用于将两个或多个表中的行结合起来&#xff0c;基于相关的列之间的关系。 JOIN操作通常用在SELECT语句中&#xff0c;以便从多个表中检索数据。 以下是几种基本的JOIN类型以及它们的用法&#xff1a; INNER JOIN&#xff1…

STM32 串口IDLE接收空闲中断+DMA

参考 http://t.csdnimg.cn/fAV38 1.基础知识 STM32 IDLE 接收空闲中断 功能&#xff1a; 在使用串口接受字符串时&#xff0c;可以使用空闲中断&#xff08;IDLEIE置1&#xff0c;即可使能空闲中断&#xff09;&#xff0c;这样在接收完一个字符串&#xff0c;进入空闲状态时&…