> 文档中心 > 鸿蒙openharmony随笔stage模型(格式较乱,主要是归纳给自己看)

鸿蒙openharmony随笔stage模型(格式较乱,主要是归纳给自己看)


乌邦图vpn

打开终端切换到 cd /var/vpnclient目录,

运行sudo ./vpnclient start

运行sudo ./vpncmd 选择2

打开另一个终端

关闭网卡 sudo service NetworkManager stop 或sudo service network-manager stop

开启网卡 sudo service NetworkManager start 或 sudo service network-manager start

切回原来终端,输入accountlist

切回另一个终端,输入sudu dhclient vpn_vpn

如何进入鸿蒙终端

打开编译工具,找到tools
在这里插入图片描述
复制这些路径,找到这个路径
在这里插入图片描述
打开目录后,鼠标右键在终端打开,
鸿蒙openharmony随笔stage模型(格式较乱,主要是归纳给自己看)
输入以下命令:.\hdc_std.exe shell
查询ip地址输入:ifconfig
重置鸿蒙网络地址:ifconfig eth1 192.168.1.107 netmask 255.255.255.0
再次查询就可以发现定义在了上述的ip地址了
鸿蒙openharmony随笔stage模型(格式较乱,主要是归纳给自己看)

建立tcp/udp连接

https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-socket-0000001281361026

1.配置权限
在以下目录下找到module.json5文件
鸿蒙openharmony随笔stage模型(格式较乱,主要是归纳给自己看)
主要添加internet权限,wifi的权限需要用可以开启,不想加其他限制可以简写
{
“name” : “ohos.permission.INTERNET”,
},
鸿蒙openharmony随笔stage模型(格式较乱,主要是归纳给自己看)
2.引入socket,绑定连接
import socket from ‘@ohos.net.socket’;
创建socket—tcp通信(udp同样的)
let plcTcp=socket.constructTCPSocketInstance()
在与另一个地址进行建立连接前需要绑定设备的ip
plcTcp.bind({address: ‘192.168.1.107’,family: 1})
.then(() => {console.log(‘bind success’);})
.catch(err => {console.log(‘bind fail’);});
address必须是字符串,可以是写设备连的网线地址,也可以获取当前wifi

获取wifi步骤定义把wifi地址解析成字符串是函数function resolveIP(ip){ if(ip  0xFFFFFFFF){throw("The number is normal!")}return (ip >>> 24) + "." + (ip >> 16 & 0xFF) + "." + (ip >> 8 & 0xFF) + "." + (ip & 0xFF);}

使用
plcTcp.bind({address: resolveIP(wifi.getIpInfo().ipAddress),family: 1})
.then(() => {console.log(‘bind success’);})
.catch(err => {console.log(‘bind fail’);});
3.创建连接
这里连接的就是目标的ip地址和端口号
首先要保证在鸿蒙终端可以ping通这个地址,例如这个就是可以连接的
鸿蒙openharmony随笔stage模型(格式较乱,主要是归纳给自己看)
与目标地址建立连接
plcTcp.connect({ address: {address: ‘192.168.1.120’, port: 102, family: 1}})
.then(() => {console.log(‘连接plc成功’)
}).catch(err => {console.log(‘connect fail’)});

4.与目标地址发信息通信(tcp)
发送信息到目标ip,注意这里plcTcp.send({ data:firstShakeHands }),data目前只支持发送string或者arraybuffer这两类型,如果你是发送个buffer必须进行buffer转换arraybuffer

错误演示:发送buffer报文使用 订阅message事件xx.on(‘message’,value=>{})接受消息是没有任何反应的,因为发送的是一个buffer缓冲区
let firstShakeHands =buffer.from(‘0300001611E00000000500C1020101C2020101C0010A’, ‘hex’)
plcTcp.send({ data:firstShakeHands }).then(() => {console.log(‘第一次握手–>success’);})
如果添加一个buffer转arraybuffer函数做转换是可以的,这样是可以发送成功的
function toArrayBuffer(buf) {
var ab = new ArrayBuffer(buf.length);
var view = new Uint8Array(ab);
for (var i = 0; i < buf.length; ++i) {
view[i] = buf[i];
}
return ab;
}

let firstShakeHands =buffer.from(‘0300001611E00000000500C1020101C2020101C0010A’, ‘hex’)
plcTcp.send({ data:toArrayBuffer(firstShakeHands) }).then(() => {console.log(‘第一次握手–>success’);})

或者使用鸿蒙自带的.buffer也是可以转换的,这样也是可以发送成功的
plcTcp.send({ data:firstShakeHands.buffer }).then(() => {console.log(‘第一次握手–>success’);})
5.收到目标返回的数据通信
plcTcp.on(‘message’, value => {
let plcBack = toBuffer(value.message)
console.log(plcBack )
})
返回的value.message是个arraybuffer类型,如需要转换buffer进行操作可以进行函数转换
function toBuffer(arrBuf) {
var buf = buffer.allocUninitializedFromPool(arrBuf.byteLength);
var view = new Uint8Array(arrBuf);
for (var i = 0; i < buf.length; ++i) {
buf[i] = view[i];
}
return buf
}
let plcBack = toBuffer(value.message)
console.log(plcBack )
这样打印的就是个buffer缓冲区

udp的收发也是一样的,发送的只能是arraybuffer或string
udp.send({
// @ts-ignore
data:sendMessage.buffer,
address: { address:targetAdd.ip, port: targetAdd.port, family: 1 }
})

iconv使用

npm install iconv-lite
安装完成前者后还需要安装这个npm i buffer
import iconv from ‘iconv-lite’
iconv.encode(str, ‘gbk’)

buffer
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-buffer.md
api和开发板需要达到9以上才能使用
import buffer from ‘@ohos.buffer’;
//根据指定编码格式的字符串,创建新的Buffer实例
let buf = buffer.from(‘21210000’,‘hex’)
// @ts-ignore
console.log(buf)
// @ts-ignore
console.log(buf.buffer)//转换arraybuffer
let buf2 = buffer.allocUninitialized(4)//创建一个4位都是0的buffer,buffer填充
buf2.fill(0)
// @ts-ignore
console.log(buf2)
//从3起到4结束填充一个5
buf2.fill(5,3,4)
// @ts-ignore
console.log(buf2)
鸿蒙openharmony随笔stage模型(格式较乱,主要是归纳给自己看)

stage模型上下文获取

var context: Context = getContext(this) as Context

唱吧