tcp修改
This commit is contained in:
		
							parent
							
								
									33a719a462
								
							
						
					
					
						commit
						3bbf35a1db
					
				| @ -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<any>)=>{ | ||||
|     console.log('result222',JSON.stringify(result)) | ||||
|     if(result.length){ | ||||
|       if(globalThis.TcpClient&&globalThis.getCloseTcp){ | ||||
|         globalThis.TcpClient.closeTcp(async ()=>{ | ||||
|   getSyncData('IpConfigTable').then(async (result: Array<any>) => { | ||||
|     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 = () => { | ||||
|       } | ||||
|     } | ||||
|   }) | ||||
| } | ||||
|  | ||||
| @ -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) | ||||
|       }); | ||||
|     }) | ||||
|   } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user