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() // 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', "tcpBinderror:" + JSON.stringify(err)); resolve(true) } 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('testTagtcpoppositeIp',this.oppositeIp,'localIp',this.localIp) 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(() => { console.log('testTagbindSuccess') 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('oppositeIp',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('tcpmsg') // 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('message', callback); } closeTcp(callback) { return new Promise((reslove,reject)=>{ let promise = this.tcp.close(); promise.then(() => { console.log('close success'); callback() reslove(true) }).catch(err => { console.log('close fail'); reslove(false) }); }) } }