nodejs net模块tcp套接字无法向硬件发送数据

问题描述 投票:0回答:1

我有一个通过 TCP 与应用程序(android)通信的硬件。使用智能手机上的 pcapdroid 捕获通信。

现在我尝试构建一个应该与硬件(而不是android)通信的节点应用程序。

现在的问题是向硬件(kemper 放大器)发送数据。

const hexToString = (hex) => {
  let str = '';
  for (let i = 0; i < hex.length; i += 2) {
    const hexValue = hex.substr(i, 2);
    const decimalValue = parseInt(hexValue, 16);
    str += String.fromCharCode(decimalValue);
  }
  return str;
};

const startHex = ["7b37374442364232" +
  "382d373835452d343634312d42383430" +
  "2d3432463046303641313146437d0d0a" +
  "7b33363946353045372d373530422d34" +
  "3539412d424145452d38354144443346" +
  "33373938447d0d0a7b32343930323732" +
  "452d434439322d344442412d41453332" +
  "2d4538414633374544334230417d0d0a" +
  "7b37373443444239452d373445442d34" +
  "3734302d414630392d41433936423341" +
  "36394131317d0d0a2e0d0a", "7b373734" +
  "43444239452d373445442d343734392d41" +
  "4630392d4143393642334136394131317d",
   "0d0a","0000000000000000"]



const socket = net.createConnection({port: 5727,host: "192.168.0.13"});


socket.on('data', data => {
   console.log("tcpserver client on data " + data);
   if (Buffer.from(data).toString('hex') === startHex[0]) {
    socket.write(Buffer.from(hexToString(startHex[1]),'utf-8'), (data) => {
      console.log("firstsend " + data);
     })
  }
})

socket.on('ready', () => {
   console.log("tcpserver client on ready " );
})

socket.on('error', (err) => {
   console.log("tcpserver client on error " + err );
})

硬件似乎不接受数据...(参见附件node_capture)

注意到了

  • 我的网卡似乎在前面添加了一个标头(这很重要吗)
  • 当使用nodejs网络模块模拟tcp发送时,硬件附加(数据包10)一个预告片“00”???

node_capture:硬件发送数据(最后是网卡头和尾部 -> 请参阅此处的最小 pcap:https://github.com/schoko11/wireshark/blob/main/node_capture.pcapng

0000   **68 54 5a d0 d2 25 02 0c 43 01 08 72 08 00** 45 00   hTZ..%..C..r..E.
0010   00 cb 03 d8 00 00 ff 06 35 a5 c0 a8 00 0d c0 a8   ........5.......
0020   00 52 16 5f b3 cc 00 00 f4 53 ce 23 ad 82 50 18   .R._.....S.#..P.
0030   3e 4e 42 c2 00 00 7b 37 37 44 42 36 42 32 38 2d   >NB...{77DB6B28-
0040   37 38 35 45 2d 34 36 34 31 2d 42 38 34 30 2d 34   785E-4641-B840-4
0050   32 46 30 46 30 36 41 31 31 46 43 7d 0d 0a 7b 33   2F0F06A11FC}..{3
0060   36 39 46 35 30 45 37 2d 37 35 30 42 2d 34 35 39   69F50E7-750B-459
0070   41 2d 42 41 45 45 2d 38 35 41 44 44 33 46 33 37   A-BAEE-85ADD3F37
0080   39 38 44 7d 0d 0a 7b 32 34 39 30 32 37 32 45 2d   98D}..{2490272E-
0090   43 44 39 32 2d 34 44 42 41 2d 41 45 33 32 2d 45   CD92-4DBA-AE32-E
00a0   38 41 46 33 37 45 44 33 42 30 41 7d 0d 0a 7b 37   8AF37ED3B0A}..{7
00b0   37 34 43 44 42 39 45 2d 37 34 45 44 2d 34 37 34   74CDB9E-74ED-474
00c0   30 2d 41 46 30 39 2d 41 43 39 36 42 33 41 36 39   0-AF09-AC96B3A69
00d0   41 31 31 7d 0d 0a 2e 0d 0a **00**                     A11}......

node_capture:节点正在发送数据:(导致之后tcp重传)

0000   **02 0c 43 01 08 72 68 54 5a d0 d2 25 08 00** 45 00   ..C..rhTZ..%..E.
0010   00 4e 25 ef 40 00 40 06 93 0b c0 a8 00 52 c0 a8   .N%.@[email protected]..
0020   00 0d b3 cc 16 5f ce 23 ad 82 00 00 f4 f6 50 18   ....._.#......P.
0030   fa 4d 81 f0 00 00 7b 37 37 34 43 44 42 39 45 2d   .M....{774CDB9E-
0040   37 34 45 44 2d 34 37 34 39 2d 41 46 30 39 2d 41   74ED-4749-AF09-A
0050   43 39 36 42 33 41 36 39 41 31 31 7d               C96B3A69A11}


hardware_capture:硬件发送数据(请参阅此处的最小捕获:https://github.com/schoko11/wireshark/blob/main/wireshark_sample1.pcap):

0000   45 00 00 cb 00 00 40 00 40 06 c1 9f c0 a8 00 0d   E.....@.@.......
0010   0a d7 ad 01 16 5f b0 ce 77 eb 77 ec cc 3f 18 d2   ....._..w.w..?..
0020   50 18 04 00 24 41 00 00 7b 37 37 44 42 36 42 32   P...$A..{77DB6B2
0030   38 2d 37 38 35 45 2d 34 36 34 31 2d 42 38 34 30   8-785E-4641-B840
0040   2d 34 32 46 30 46 30 36 41 31 31 46 43 7d 0d 0a   -42F0F06A11FC}..
0050   7b 33 36 39 46 35 30 45 37 2d 37 35 30 42 2d 34   {369F50E7-750B-4
0060   35 39 41 2d 42 41 45 45 2d 38 35 41 44 44 33 46   59A-BAEE-85ADD3F
0070   33 37 39 38 44 7d 0d 0a 7b 32 34 39 30 32 37 32   3798D}..{2490272
0080   45 2d 43 44 39 32 2d 34 44 42 41 2d 41 45 33 32   E-CD92-4DBA-AE32
0090   2d 45 38 41 46 33 37 45 44 33 42 30 41 7d 0d 0a   -E8AF37ED3B0A}..
00a0   7b 37 37 34 43 44 42 39 45 2d 37 34 45 44 2d 34   {774CDB9E-74ED-4
00b0   37 34 30 2d 41 46 30 39 2d 41 43 39 36 42 33 41   740-AF09-AC96B3A
00c0   36 39 41 31 31 7d 0d 0a 2e 0d 0a                  69A11}.....

hardware_capture:android发送数据:

0000   45 00 00 4e 6a c6 40 00 40 06 57 56 0a d7 ad 01   E..Nj.@[email protected]....
0010   c0 a8 00 0d b0 ce 16 5f cc 3f 18 d2 77 eb 78 8f   ......._.?..w.x.
0020   50 18 00 41 17 94 00 00 7b 37 37 34 43 44 42 39   P..A....{774CDB9
0030   45 2d 37 34 45 44 2d 34 37 34 30 2d 41 46 30 39   E-74ED-4740-AF09
0040   2d 41 43 39 36 42 33 41 36 39 41 31 31 7d         -AC96B3A69A11}
  1. 为什么我会收到 tcp 重传错误,

  2. 任何解决问题的建议

在wireshark中跟随tcp流给我这个:

wireshark_tcp_stream

谢谢!

node.js tcp wireshark
1个回答
0
投票

starthex[1] 中的十六进制错误,我傻了...否则现在一切都很好:-(

© www.soinside.com 2019 - 2024. All rights reserved.