190 lines
6.4 KiB
TypeScript
Raw Normal View History

2024-01-05 11:11:15 +08:00
import socket from '@ohos.net.socket';
import buffer from '@ohos.buffer';
const TAG = '[TcpDemo.TcpClient]'
import prompt from '@ohos.prompt'
export default class TcpClient {
private localIp: string = ''
private localIpPort: string = ''
private oppositeIp: string = ''
private oppositeIpPort: string = ''
private tcp: any = null
constructor(tcplocalIp: string, tcplocalIpPort:string,tcpOppositeIp: string,tcpOppositePort:string) {
this.localIp = tcplocalIp
this.oppositeIp = tcpOppositeIp
this.localIpPort = tcplocalIpPort
this.oppositeIpPort = tcpOppositePort
this.tcp = socket.constructTCPSocketInstance();
}
rebindTcp(localIp: string, localIpPort:string,oppositeIp: string,oppositeIpPort:string){
return new Promise((resolve, reject)=>{
this.localIp = localIp
this.oppositeIp = oppositeIp
this.localIpPort = localIpPort
this.oppositeIpPort = oppositeIpPort
let promise=this.tcp.bind({ address: this.localIp, port:parseInt(this.localIpPort), family: 1 }, err => {
if (err) {
console.log('bind fail');
resolve(true)
}
resolve(false)
console.log('bind success');
})
})
// let promise = this.udp.bind({
// // address: '192.168.7.170', port: 20122, family: 1
// // address: '192.168.7.170', port: 31013, family: 1
// address: this.localIp, port: parseInt(this.localIpPort), family: 1
// });
}
bindTcp() {
return new Promise((resolve,reject)=>{
let promise=this.tcp.bind({ address: this.localIp, port:parseInt(this.localIpPort), family: 1 }, err => {
if (err) {
console.log('bind fail');
resolve(true)
}
console.log('bind success');
resolve(false)
})
})
console.log('localIp',this.localIp)
console.log('localIpPort',this.localIpPort)
// let promise = this.udp.bind({
// // address: '192.168.7.170', port: 20122, family: 1
// // address: '192.168.7.170', port: 31013, family: 1
// address: this.localIp, port: parseInt(this.localIpPort), family: 1
// });
}
connectTcp(){
console.log('22323')
return new Promise((resolve,reject)=>{
let promise = this.tcp.connect({ address: {address: this.oppositeIp, port: parseInt(this.oppositeIpPort), family: 1} , timeout: 6000});
promise.then(() => {
this.tcp.setExtraOptions({
keepAlive: true,
// OOBInline: true,
// TCPNoDelay: true,
// socketLinger: { on:true, linger:10 },
// receiveBufferSize: 1000,
// sendBufferSize: 1000,
// reuseAddress: true,
// socketTimeout: 3000,
},err => {
if (err) {
console.log('setExtraOptions fail');
return;
}
console.log('setExtraOptions success');
});
console.log('connect success')
resolve(true)
}).catch(err => {
console.log('connect fail');
resolve(false)
});
})
}
sendMsg(msg: string) {console.log('oppositeIp',this.oppositeIp)
return new Promise((reslove,reject)=>{
let promise = this.tcp.send({
data:msg
});
promise.then(() => {
console.log('send success');
reslove(true)
}).catch(err => {
console.log('send fail');
reslove(false)
});
})
console.log('oppositeIpPort',this.oppositeIpPort)
// let promise = this.udp.send({
// data: msg,
// address: {
// // address: '192.168.7.124',
// // port: 30013,
// // address: '192.168.7.124',
// // port: 20022,
// address: this.oppositeIp,
// port: parseInt(this.oppositeIpPort),
// family: 1
// }
// });
// promise.then(() => {
// console.log(`${TAG} udp send success:${msg}`);
// }).catch(err => {
// console.log(`${TAG} udp send fail:${JSON.stringify(err)}`);
// });
}
onMessage(callback) {
this.tcp.on('message', value => {
// console.log('messageLengt',,value.message.length))
// console.log("on message, message:" + value.message+ ", remoteInfo:" )
if (value) {
let dataView = new DataView(value.message)
// const Arraybuffer=buffer.from(value.message, 5, dataView?.byteLength);
const Arraybuffer=value.message.slice(5, dataView?.byteLength);
callback(Arraybuffer)
}else{
callback('')
}
// callback(value.message)
});
// this.udp.on('message', value => {
// // 收到的是ArrayBuffer 需要进行转换解析
// if (value) {
// let dataView = new DataView(value.message)
// // console.log(`${TAG} udp message length:${dataView?.byteLength}`);
// let str = ""
// for (let i = 0;i < dataView?.byteLength; ++i) {
// let c = String.fromCharCode(dataView?.getUint8(i))
// if (c !== "\n") {
// str += c
// }
// }
// console.log(`${TAG} udp on message array buffer:${str}`);
// callback(str)
// }else{
// callback('')
// }
//
//
// });
}
offTcp(callback) {
this.tcp.off('message', callback);
}
closeTcp(callback) {
return new Promise((reslove,reject)=>{
let promise = this.tcp.close();
promise.then(() => {
console.log('close success');
reslove(true)
}).catch(err => {
console.log('close fail');
reslove(false)
});
})
}
}