From 3bbf35a1dbaf9856637885eaabcb2e6fae164b9d Mon Sep 17 00:00:00 2001 From: lvyuankang <1344032923@qq.com> Date: Tue, 30 Jul 2024 10:35:41 +0800 Subject: [PATCH] =?UTF-8?q?tcp=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/common/utils/GlobalTcp.ts | 78 ++--- entry/src/main/ets/common/utils/TcpClient.ts | 333 ++++++++++--------- 2 files changed, 213 insertions(+), 198 deletions(-) diff --git a/entry/src/main/ets/common/utils/GlobalTcp.ts b/entry/src/main/ets/common/utils/GlobalTcp.ts index a709aed5..fe02808a 100644 --- a/entry/src/main/ets/common/utils/GlobalTcp.ts +++ b/entry/src/main/ets/common/utils/GlobalTcp.ts @@ -1,74 +1,76 @@ import TcpClient from './TcpClient'; -import { getSyncData} from '../service/initable' +import { getSyncData } from '../service/initable'; import hilog from '@ohos.hilog'; + export async function getTCP() { - getSyncData('IpConfigTable').then(async (result:Array)=>{ - console.log('result222',JSON.stringify(result)) - if(result.length){ - if(globalThis.TcpClient&&globalThis.getCloseTcp){ - globalThis.TcpClient.closeTcp(async ()=>{ + getSyncData('IpConfigTable').then(async (result: Array) => { + console.log('result222', JSON.stringify(result)) + if (result.length) { + if (globalThis.TcpClient && globalThis.TcpClient.closeTcp) { + globalThis.TcpClient.closeTcp(async () => { // const tcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort) // globalThis.TcpClient = tcpClient - setTimeout(async ()=>{ - await globalThis.TcpClient.rebindTcp(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort) + setTimeout(async () => { + await globalThis.TcpClient.rebindTcp(result[0].tcplocalIp, result[0].tcplocalIpPort, result[0].tcpOppositeIp, result[0].tcpOppositePort) await globalThis.TcpClient.connectTcp() - await globalThis.TcpClient.sendMsg('1002')//1002 - globalThis.TcpClient.onError((val)=>{ - setTimeout(()=>{ - globalThis.TcpClient.sendMsg('1002')//1002 - if(val){ + await globalThis.TcpClient.sendMsg('1002') //1002 + globalThis.TcpClient.onError((val) => { + setTimeout(() => { + globalThis.TcpClient.sendMsg('1002') //1002 + if (val) { // 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) } - },1000) + }, 1000) }) - await globalThis.TcpClient.onMessage((val)=>{ - setTimeout(()=>{ - globalThis.TcpClient.sendMsg('1002')//1002 - if(val){ + await globalThis.TcpClient.onMessage((val) => { + setTimeout(() => { + globalThis.TcpClient.sendMsg('1002') //1002 + if (val) { // 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) } - },1000) + }, 1000) }) - },2000) + }, 2000) }) - }else{ - const tcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort) + } else { + const tcpClient: TcpClient = new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort, result[0].tcpOppositeIp, result[0].tcpOppositePort) globalThis.TcpClient = tcpClient await globalThis.TcpClient.bindTcp() await globalThis.TcpClient.connectTcp() - await globalThis.TcpClient.sendMsg('1002')//1002 - globalThis.TcpClient.onError((val)=>{ + await globalThis.TcpClient.sendMsg('1002') //1002 + globalThis.TcpClient.onError((val) => { hilog.info(0x0000, 'testTag', "valvalval2" + JSON.stringify(val)); - setTimeout(()=>{ - globalThis.TcpClient.sendMsg('1002')//1002 - if(val&& globalThis.udpClient?.sendMsg){ + setTimeout(() => { + globalThis.TcpClient.sendMsg('1002') //1002 + if (val && globalThis.udpClient?.sendMsg) { globalThis.udpClient?.sendMsg(val) } - },1000) + }, 1000) }) - await globalThis.TcpClient.onMessage((val)=>{ + await globalThis.TcpClient.onMessage((val) => { hilog.info(0x0000, 'testTag', "valvalval2" + JSON.stringify(val)); - setTimeout(()=>{ - globalThis.TcpClient.sendMsg('1002')//1002 - if(val&& globalThis.udpClient?.sendMsg){ + setTimeout(() => { + globalThis.TcpClient.sendMsg('1002') //1002 + if (val && globalThis.udpClient?.sendMsg) { globalThis.udpClient?.sendMsg(val) } - },1000) + }, 1000) }) } // globalThis.udpClient = new UdpClient(result[0].localIp, result[0].localIpPort,result[0].oppositeIp,result[0].oppositeIpPort) - }else{ - globalThis.TcpClient={} - globalThis.TcpClient.onMessage=()=>{} + } else { + globalThis.TcpClient = {} + globalThis.TcpClient.onMessage = () => { + } } }) } diff --git a/entry/src/main/ets/common/utils/TcpClient.ts b/entry/src/main/ets/common/utils/TcpClient.ts index 94b69093..e0765e65 100644 --- a/entry/src/main/ets/common/utils/TcpClient.ts +++ b/entry/src/main/ets/common/utils/TcpClient.ts @@ -1,176 +1,189 @@ 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'; +const TAG = 'socketTag[TcpDemo.TcpClient]' + export default class TcpClient { - private localIp: string = '' - private localIpPort: string = '' - private oppositeIp: string = '' - private oppositeIpPort: string = '' + private localIp: string = '' + private localIpPort: string = '' + private oppositeIp: string = '' + private oppositeIpPort: string = '' - private tcp: any = null + 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 - console.log(TAG,'new Tcp',this.localIp,this.localIpPort,this.oppositeIp,this.oppositeIpPort) - this.tcp = socket.constructTCPSocketInstance(); - } - onError(callback?){ - this.tcp.on('error', err => { - console.log(TAG,'tcpOnerror', JSON.stringify(err)) - setTimeout(async ()=>{ - await this.bindTcp() - await this.connectTcp() - this.onMessage(callback) - },2000) - // this.closeUdp(()=>{ - // this.bindUdp() - // }) + constructor(tcplocalIp: string, tcplocalIpPort: string, tcpOppositeIp: string, tcpOppositePort: string) { + this.localIp = tcplocalIp + this.oppositeIp = tcpOppositeIp + this.localIpPort = tcplocalIpPort + this.oppositeIpPort = tcpOppositePort + console.log(TAG, 'new Tcp', this.localIp, this.localIpPort, this.oppositeIp, this.oppositeIpPort) + this.tcp = socket.constructTCPSocketInstance(); + } + + onError(callback?) { + this.tcp.on('error', err => { + console.log(TAG, 'tcpOnerror', JSON.stringify(err)) + setTimeout(async () => { + await this.bindTcp() + await this.connectTcp() + this.onMessage(callback) + }, 2000) + // 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; + } }); - } - 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) + globalThis.getCloseTcp = false + resolve(true) + }).catch(err => { + globalThis.getCloseTcp = true + setTimeout(() => { + this.connectTcp() + resolve(false) + }, 2000) + console.log('testTagconnect,error') - }) - }) + }); + }) + } - // 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 - // }); + sendMsg(msg: string) { + console.log(TAG, 'tcpSend', msg.length, msg) + return new Promise((reslove, reject) => { + let promise = this.tcp.send({ + data: msg + }); + promise.then(() => { + reslove(true) + }).catch(err => { + reslove(false) + }); + }) + } - } - 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 - // }); + 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); - } - 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(() => { + callback && callback(Arraybuffer) + } else { + callback && callback('') + } + // callback(value.message) + }); + } - 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 - resolve(true) - }).catch(err => { - globalThis.getCloseTcp=true - setTimeout(()=>{ - this.connectTcp() - },2000) - console.log('testTagconnect,error') + offTcp(callback) { + console.log(TAG, 'tcpofff') - }); - }) - } + this.tcp.off('testTagofmessg', callback); + } - sendMsg(msg: string) { - console.log(TAG,'tcpSend',msg.length,msg) - return new Promise((reslove,reject)=>{ - let promise = this.tcp.send({ - data:msg - }); - promise.then(() => { - reslove(true) - }).catch(err => { - 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) - }); - }) - } + 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) + }); + }) + } } \ No newline at end of file