202 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import socket from '@ohos.net.socket';
 | |
| import buffer from '@ohos.buffer';
 | |
| 
 | |
| const TAG = '[TcpDemo.TcpClient]'
 | |
| import prompt from '@ohos.prompt'
 | |
| import hilog from '@ohos.hilog';
 | |
| 
 | |
| 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
 | |
|         console.log('tcp1111',this.localIp,this.localIpPort,this.oppositeIp,this.oppositeIpPort)
 | |
|         this.tcp = socket.constructTCPSocketInstance();
 | |
|     }
 | |
|     onError(callback?){
 | |
|         this.tcp.on('error', err => {
 | |
|             hilog.info(0x0000, 'testTag', "on error, err:" + JSON.stringify(err));
 | |
|             callback&&callback()
 | |
|             // 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
 | |
|             let promise=this.tcp.bind({ address:  this.localIp, port:parseInt(this.localIpPort), family: 1 }, err => {
 | |
|                 if (err) {
 | |
|                     hilog.info(0x0000, 'testTag', "tcpreBinderror:" + JSON.stringify(err));
 | |
|                     resolve(true)
 | |
|                 }
 | |
|                 console.log('testTag,rebindtestTag tcp bind success');
 | |
| 
 | |
|                 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('tcpoppositeIp',this.oppositeIp,'localIp',this.localIp)
 | |
|         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');
 | |
| 
 | |
|                     hilog.info(0x0000, 'testTag', "tcpBinderror:" + JSON.stringify(err));
 | |
|                     resolve(true)
 | |
|                     return
 | |
|                 }
 | |
|                 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('testTagtcbpoppositeIp',this.oppositeIp,this.oppositeIpPort,'localIp',this.localIp,this.localIpPort)
 | |
|         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) {
 | |
|                         return;
 | |
|                     }
 | |
|                 });
 | |
|                 resolve(true)
 | |
|             }).catch(err => {
 | |
|                 console.log('testTagconnect,error')
 | |
|                 resolve(false)
 | |
|             });
 | |
|         })
 | |
| 
 | |
|     }
 | |
| 
 | |
|     sendMsg(msg: string) {
 | |
|         console.log('testTagsendoppositeIp',this.oppositeIp)
 | |
|         return new Promise((reslove,reject)=>{
 | |
|             let promise = this.tcp.send({
 | |
|                 data:msg
 | |
|             });
 | |
|             promise.then(() => {
 | |
|                 reslove(true)
 | |
|             }).catch(err => {
 | |
|                 reslove(false)
 | |
|             });
 | |
|         })
 | |
| 
 | |
|         // 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('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)
 | |
|         });
 | |
|         // 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('testTagofmessg', callback);
 | |
|     }
 | |
|     closeTcp(callback) {
 | |
|         return new Promise((reslove,reject)=>{
 | |
|             let promise = this.tcp.close();
 | |
|             promise.then(() => {
 | |
|                 console.log('testTagclose success');
 | |
|                 callback()
 | |
|                 reslove(true)
 | |
|             }).catch(err => {
 | |
|                 console.log('testTagclose fail');
 | |
|                 reslove(false)
 | |
|             });
 | |
|         })
 | |
| 
 | |
| 
 | |
|     }
 | |
| } |