tcp修改

This commit is contained in:
lvyuankang 2024-07-30 10:35:41 +08:00
parent 33a719a462
commit 3bbf35a1db
2 changed files with 213 additions and 198 deletions

View File

@ -1,74 +1,76 @@
import TcpClient from './TcpClient'; import TcpClient from './TcpClient';
import { getSyncData} from '../service/initable' import { getSyncData } from '../service/initable';
import hilog from '@ohos.hilog'; import hilog from '@ohos.hilog';
export async function getTCP() { export async function getTCP() {
getSyncData('IpConfigTable').then(async (result:Array<any>)=>{ getSyncData('IpConfigTable').then(async (result: Array<any>) => {
console.log('result222',JSON.stringify(result)) console.log('result222', JSON.stringify(result))
if(result.length){ if (result.length) {
if(globalThis.TcpClient&&globalThis.getCloseTcp){ if (globalThis.TcpClient && globalThis.TcpClient.closeTcp) {
globalThis.TcpClient.closeTcp(async ()=>{ globalThis.TcpClient.closeTcp(async () => {
// const tcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort) // const tcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort)
// globalThis.TcpClient = tcpClient // globalThis.TcpClient = tcpClient
setTimeout(async ()=>{ setTimeout(async () => {
await globalThis.TcpClient.rebindTcp(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort) await globalThis.TcpClient.rebindTcp(result[0].tcplocalIp, result[0].tcplocalIpPort, result[0].tcpOppositeIp, result[0].tcpOppositePort)
await globalThis.TcpClient.connectTcp() await globalThis.TcpClient.connectTcp()
await globalThis.TcpClient.sendMsg('1002')//1002 await globalThis.TcpClient.sendMsg('1002') //1002
globalThis.TcpClient.onError((val)=>{ globalThis.TcpClient.onError((val) => {
setTimeout(()=>{ setTimeout(() => {
globalThis.TcpClient.sendMsg('1002')//1002 globalThis.TcpClient.sendMsg('1002') //1002
if(val){ if (val) {
// const msg=val.substring(5,val.length-1) // const msg=val.substring(5,val.length-1)
console.log('socketTag[PLC.UdpClient] status:',globalThis.udpClient.getStatus()) console.log('socketTag[PLC.UdpClient] status:', globalThis.udpClient.getStatus())
globalThis.udpClient?.sendMsg(val) globalThis.udpClient?.sendMsg(val)
} }
},1000) }, 1000)
}) })
await globalThis.TcpClient.onMessage((val)=>{ await globalThis.TcpClient.onMessage((val) => {
setTimeout(()=>{ setTimeout(() => {
globalThis.TcpClient.sendMsg('1002')//1002 globalThis.TcpClient.sendMsg('1002') //1002
if(val){ if (val) {
// const msg=val.substring(5,val.length-1) // const msg=val.substring(5,val.length-1)
console.log('socketTag[PLC.UdpClient] status:',globalThis.udpClient.getStatus()) console.log('socketTag[PLC.UdpClient] status:', globalThis.udpClient.getStatus())
globalThis.udpClient?.sendMsg(val) globalThis.udpClient?.sendMsg(val)
} }
},1000) }, 1000)
}) })
},2000) }, 2000)
}) })
}else{ } else {
const tcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort) const tcpClient: TcpClient = new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort, result[0].tcpOppositeIp, result[0].tcpOppositePort)
globalThis.TcpClient = tcpClient globalThis.TcpClient = tcpClient
await globalThis.TcpClient.bindTcp() await globalThis.TcpClient.bindTcp()
await globalThis.TcpClient.connectTcp() await globalThis.TcpClient.connectTcp()
await globalThis.TcpClient.sendMsg('1002')//1002 await globalThis.TcpClient.sendMsg('1002') //1002
globalThis.TcpClient.onError((val)=>{ globalThis.TcpClient.onError((val) => {
hilog.info(0x0000, 'testTag', "valvalval2" + JSON.stringify(val)); hilog.info(0x0000, 'testTag', "valvalval2" + JSON.stringify(val));
setTimeout(()=>{ setTimeout(() => {
globalThis.TcpClient.sendMsg('1002')//1002 globalThis.TcpClient.sendMsg('1002') //1002
if(val&& globalThis.udpClient?.sendMsg){ if (val && globalThis.udpClient?.sendMsg) {
globalThis.udpClient?.sendMsg(val) globalThis.udpClient?.sendMsg(val)
} }
},1000) }, 1000)
}) })
await globalThis.TcpClient.onMessage((val)=>{ await globalThis.TcpClient.onMessage((val) => {
hilog.info(0x0000, 'testTag', "valvalval2" + JSON.stringify(val)); hilog.info(0x0000, 'testTag', "valvalval2" + JSON.stringify(val));
setTimeout(()=>{ setTimeout(() => {
globalThis.TcpClient.sendMsg('1002')//1002 globalThis.TcpClient.sendMsg('1002') //1002
if(val&& globalThis.udpClient?.sendMsg){ if (val && globalThis.udpClient?.sendMsg) {
globalThis.udpClient?.sendMsg(val) globalThis.udpClient?.sendMsg(val)
} }
},1000) }, 1000)
}) })
} }
// globalThis.udpClient = new UdpClient(result[0].localIp, result[0].localIpPort,result[0].oppositeIp,result[0].oppositeIpPort) // globalThis.udpClient = new UdpClient(result[0].localIp, result[0].localIpPort,result[0].oppositeIp,result[0].oppositeIpPort)
}else{ } else {
globalThis.TcpClient={} globalThis.TcpClient = {}
globalThis.TcpClient.onMessage=()=>{} globalThis.TcpClient.onMessage = () => {
}
} }
}) })
} }

View File

@ -1,176 +1,189 @@
import socket from '@ohos.net.socket'; import socket from '@ohos.net.socket';
import buffer from '@ohos.buffer';
const TAG = 'socketTag[TcpDemo.TcpClient]'
import prompt from '@ohos.prompt'
import hilog from '@ohos.hilog'; import hilog from '@ohos.hilog';
const TAG = 'socketTag[TcpDemo.TcpClient]'
export default class TcpClient { export default class TcpClient {
private localIp: string = '' private localIp: string = ''
private localIpPort: string = '' private localIpPort: string = ''
private oppositeIp: string = '' private oppositeIp: string = ''
private oppositeIpPort: string = '' private oppositeIpPort: string = ''
private tcp: any = null private tcp: any = null
constructor(tcplocalIp: string, tcplocalIpPort:string,tcpOppositeIp: string,tcpOppositePort:string) { constructor(tcplocalIp: string, tcplocalIpPort: string, tcpOppositeIp: string, tcpOppositePort: string) {
this.localIp = tcplocalIp this.localIp = tcplocalIp
this.oppositeIp = tcpOppositeIp this.oppositeIp = tcpOppositeIp
this.localIpPort = tcplocalIpPort this.localIpPort = tcplocalIpPort
this.oppositeIpPort = tcpOppositePort this.oppositeIpPort = tcpOppositePort
console.log(TAG,'new Tcp',this.localIp,this.localIpPort,this.oppositeIp,this.oppositeIpPort) console.log(TAG, 'new Tcp', this.localIp, this.localIpPort, this.oppositeIp, this.oppositeIpPort)
this.tcp = socket.constructTCPSocketInstance(); this.tcp = socket.constructTCPSocketInstance();
} }
onError(callback?){
this.tcp.on('error', err => { onError(callback?) {
console.log(TAG,'tcpOnerror', JSON.stringify(err)) this.tcp.on('error', err => {
setTimeout(async ()=>{ console.log(TAG, 'tcpOnerror', JSON.stringify(err))
await this.bindTcp() setTimeout(async () => {
await this.connectTcp() await this.bindTcp()
this.onMessage(callback) await this.connectTcp()
},2000) this.onMessage(callback)
// this.closeUdp(()=>{ }, 2000)
// this.bindUdp() // this.closeUdp(()=>{
// }) // this.bindUdp()
// })
});
}
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
console.log(TAG, 'tcpreBind', this.localIp, this.localIpPort)
let promise = this.tcp.bind({
address: this.localIp, port: parseInt(this.localIpPort), family: 1
}, err => {
if (err) {
globalThis.getCloseTcp = true
hilog.info(0x0000, 'testTag', "tcpreBinderror:" + JSON.stringify(err));
resolve(true)
}
console.log('testTag,rebindtestTag tcp bind success');
globalThis.getCloseTcp = false
resolve(false)
})
})
// 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() {
console.log(TAG, 'tcpbind', this.localIp, 'localIp', this.localIpPort)
return new Promise((resolve, reject) => {
let promise = this.tcp.bind({
address: this.localIp, port: parseInt(this.localIpPort), family: 1
}, err => {
if (err) {
console.log('testTag tcp bind faile');
globalThis.getCloseTcp = true
hilog.info(0x0000, 'testTag', "tcpBinderror:" + JSON.stringify(err));
resolve(true)
return
}
globalThis.getCloseTcp = false
console.log('testTag tcp 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(TAG, 'tcpConnect', this.oppositeIp, 'localIp', this.oppositeIpPort)
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) {
return;
}
}); });
} globalThis.getCloseTcp = false
rebindTcp(localIp: string, localIpPort:string,oppositeIp: string,oppositeIpPort:string){ resolve(true)
return new Promise((resolve, reject)=>{ }).catch(err => {
this.localIp = localIp globalThis.getCloseTcp = true
this.oppositeIp = oppositeIp setTimeout(() => {
this.localIpPort = localIpPort this.connectTcp()
this.oppositeIpPort = oppositeIpPort resolve(false)
console.log(TAG,'tcpreBind', this.localIp,this.localIpPort) }, 2000)
let promise=this.tcp.bind({ address: this.localIp, port:parseInt(this.localIpPort), family: 1 }, err => { console.log('testTagconnect,error')
if (err) {
globalThis.getCloseTcp=true
hilog.info(0x0000, 'testTag', "tcpreBinderror:" + JSON.stringify(err));
resolve(true)
}
console.log('testTag,rebindtestTag tcp bind success');
globalThis.getCloseTcp=false
resolve(false)
}) });
}) })
}
// let promise = this.udp.bind({ sendMsg(msg: string) {
// // address: '192.168.7.170', port: 20122, family: 1 console.log(TAG, 'tcpSend', msg.length, msg)
// // address: '192.168.7.170', port: 31013, family: 1 return new Promise((reslove, reject) => {
// address: this.localIp, port: parseInt(this.localIpPort), family: 1 let promise = this.tcp.send({
// }); data: msg
});
promise.then(() => {
reslove(true)
}).catch(err => {
reslove(false)
});
})
}
} onMessage(callback?) {
bindTcp() { this.tcp.on('message', value => {
console.log(TAG,'tcpbind',this.localIp,'localIp',this.localIpPort) console.log(TAG, 'Tcponmessage', value.length, value)
return new Promise((resolve,reject)=>{
let promise=this.tcp.bind({ address: this.localIp, port:parseInt(this.localIpPort), family: 1 }, err => {
if (err) {
console.log('testTag tcp bind faile');
globalThis.getCloseTcp=true
hilog.info(0x0000, 'testTag', "tcpBinderror:" + JSON.stringify(err));
resolve(true)
return
}
globalThis.getCloseTcp=false
console.log('testTag tcp 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
// });
// console.log('messageLengt',,value.message.length))
console.log('testTagtcpmsg')
// 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 && callback(Arraybuffer)
connectTcp(){ } else {
console.log(TAG,'tcpConnect',this.oppositeIp,'localIp',this.oppositeIpPort) callback && callback('')
return new Promise((resolve,reject)=>{ }
let promise = this.tcp.connect({ address: {address: this.oppositeIp, port: parseInt(this.oppositeIpPort), family: 1} , timeout: 6000}); // callback(value.message)
promise.then(() => { });
}
this.tcp.setExtraOptions({ offTcp(callback) {
keepAlive: true, console.log(TAG, 'tcpofff')
// OOBInline: true,
// TCPNoDelay: true,
// socketLinger: { on:true, linger:10 },
// receiveBufferSize: 1000,
// sendBufferSize: 1000,
// reuseAddress: true,
// socketTimeout: 3000,
},err => {
if (err) {
return;
}
});
globalThis.getCloseTcp=false
resolve(true)
}).catch(err => {
globalThis.getCloseTcp=true
setTimeout(()=>{
this.connectTcp()
},2000)
console.log('testTagconnect,error')
}); this.tcp.off('testTagofmessg', callback);
}) }
}
sendMsg(msg: string) { closeTcp(callback) {
console.log(TAG,'tcpSend',msg.length,msg) return new Promise((reslove, reject) => {
return new Promise((reslove,reject)=>{ console.log(TAG, 'tcpClose')
let promise = this.tcp.send({ let promise = this.tcp.close();
data:msg promise.then(() => {
}); globalThis.getCloseTcp = true
promise.then(() => { console.log(TAG, 'tcpCloseSuccess')
reslove(true) callback()
}).catch(err => { reslove(true)
reslove(false) }).catch(err => {
}); console.log(TAG, 'tcpClosefailed')
}) reslove(false)
} });
})
onMessage(callback?) { }
this.tcp.on('message', value => {
console.log(TAG,'Tcponmessage',value.length,value)
// console.log('messageLengt',,value.message.length))
console.log('testTagtcpmsg')
// 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&&callback(Arraybuffer)
}else{
callback&&callback('')
}
// callback(value.message)
});
}
offTcp(callback) {
console.log(TAG,'tcpofff')
this.tcp.off('testTagofmessg', callback);
}
closeTcp(callback) {
return new Promise((reslove,reject)=>{
console.log(TAG,'tcpClose')
let promise = this.tcp.close();
promise.then(() => {
globalThis.getCloseTcp=true
console.log(TAG,'tcpCloseSuccess')
callback()
reslove(true)
}).catch(err => {
console.log(TAG,'tcpClosefailed')
reslove(false)
});
})
}
} }