var net = require('net'); var fs = require('fs'); // 载入fs模块 var HOST = '0.0.0.0'; var PORT = 6800; // var HOST = '192.168.2.109'; // var PORT = 43212; var client = new net.Socket(); //const log = require('simple-node-logger').createSimpleFileLogger('./server.log'); var lastBuffer = null; // 连接状态码首次连接没连接上 一直等待 等接上了再发送连通性测试 var connectFlag = 1 client.connect(PORT, HOST, function () { connectFlag = 2 console.log('connected') //一开始就连接上 发送连通性测试 client.emit('initConnect','1'); }); var flag = 0 var time = 0 client.on('error', function (ex) { console.log("Socket Client Connect error"); console.log(ex); }); // 为这个socket实例添加一个"close"事件处理函数 client.on('close', function () { if(flag == 0){ client.emit('disconnect','0'); time = new Date(); } flag = 1; connectFlag = 1 if(connectFlag == 1) { // 有连接过才能进行等待重连操作 console.log('Socket CLOSED,1 seconds retry connect'); setTimeout(function () { client.connect(PORT, HOST,function () { if(flag == 1){ flag = 2; } }); }, 1000); } // client.emit('reconnectClose','3'); }); let start = new Date().getTime() client.on('data', function (data) { //console.log("data",new Date().getTime()-start); //log.info("data",new Date().getTime()-start); start = new Date().getTime(); if (lastBuffer !== null) { data = Buffer.concat([lastBuffer, data]); } let flag = 1; while(flag){ // 上一条数据流正常 // 先读取长度 //log.info('demo') let validNumByteArray = new Uint8Array(data.slice(2, 6)); let validNum = new DataView(validNumByteArray.buffer).getInt32(); // 接收到的数据长度大于有效数据长度,说明后面有新的协议 if (data.length > 6 + validNum + 1) { let validData = data.slice(0, 6 + validNum + 1); client.emit('validData', validData); // 将多余部分存起来 lastBuffer = data.slice(6 + validNum + 1); if(lastBuffer.length >6){ data = lastBuffer; continue; } } else if (data.length === 6 + validNum + 1) { client.emit('validData', data); lastBuffer = null; } else { // 存起来下次拼接 lastBuffer = data; } flag = 0; } }); module.exports = client;