socketClient.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. var net = require('net');
  2. var fs = require('fs'); // 载入fs模块
  3. var HOST = '192.168.2.100';
  4. var PORT = 43212;
  5. // var HOST = '192.168.2.109';
  6. // var PORT = 43212;
  7. var client = new net.Socket();
  8. //const log = require('simple-node-logger').createSimpleFileLogger('./server.log');
  9. var lastBuffer = null;
  10. // 连接状态码首次连接没连接上 一直等待 等接上了再发送连通性测试
  11. var connectFlag = 1
  12. client.connect(PORT, HOST, function () {
  13. connectFlag = 2
  14. console.log('connected')
  15. //一开始就连接上 发送连通性测试
  16. client.emit('initConnect','1');
  17. });
  18. var flag = 0
  19. var time = 0
  20. client.on('error', function (ex) {
  21. console.log("Socket Client Connect error");
  22. console.log(ex);
  23. });
  24. // 为这个socket实例添加一个"close"事件处理函数
  25. client.on('close', function () {
  26. if(flag == 0){
  27. client.emit('disconnect','0');
  28. time = new Date();
  29. }
  30. flag = 1;
  31. connectFlag = 1
  32. if(connectFlag == 1) {
  33. // 有连接过才能进行等待重连操作
  34. console.log('Socket CLOSED,1 seconds retry connect');
  35. setTimeout(function () {
  36. client.connect(PORT, HOST,function () {
  37. if(flag == 1){
  38. flag = 2;
  39. }
  40. });
  41. }, 1000);
  42. }
  43. // client.emit('reconnectClose','3');
  44. });
  45. let start = new Date().getTime()
  46. client.on('data', function (data) {
  47. //console.log("data",new Date().getTime()-start);
  48. //log.info("data",new Date().getTime()-start);
  49. start = new Date().getTime();
  50. if (lastBuffer !== null) {
  51. data = Buffer.concat([lastBuffer, data]);
  52. }
  53. let flag = 1;
  54. while(flag){
  55. // 上一条数据流正常
  56. // 先读取长度
  57. //log.info('demo')
  58. let validNumByteArray = new Uint8Array(data.slice(2, 6));
  59. let validNum = new DataView(validNumByteArray.buffer).getInt32();
  60. // 接收到的数据长度大于有效数据长度,说明后面有新的协议
  61. if (data.length > 6 + validNum + 1) {
  62. let validData = data.slice(0, 6 + validNum + 1);
  63. client.emit('validData', validData);
  64. // 将多余部分存起来
  65. lastBuffer = data.slice(6 + validNum + 1);
  66. if(lastBuffer.length >6){
  67. data = lastBuffer;
  68. continue;
  69. }
  70. } else if (data.length === 6 + validNum + 1) {
  71. client.emit('validData', data);
  72. lastBuffer = null;
  73. } else {
  74. // 存起来下次拼接
  75. lastBuffer = data;
  76. }
  77. flag = 0;
  78. }
  79. });
  80. module.exports = client;