簡體   English   中英

當數據以緩沖區格式從物聯網設備傳入時,NodeJS 未收到完整的 tcp 數據包

[英]NodeJS not receiving full tcp packet when data comes in buffer format from iot devices

我們有一個用於實時通信(GPS 定位)的物聯網設備。 設備正在向 Nodejs 服務器發送 TCP 數據包。 但是當我們收到時,它是緩沖區格式並被剝離。 我們使用 tcpdump 來檢查網絡/傳輸層有什么數據。 並且數據是十六進制格式。

0x0000:  029e 280b b191 022c 1666 c6e4 0800 4500  ..(....,.f....E.
0x0010:  0061 0ae6 0000 6706 b735 6b54 5c96 ac1f  .a....g..5kT\...
0x0020:  1d72 5478 0c08 bc9e fa71 4bff c417 5010  .rTx.....qK...P.
0x0030:  03c4 2571 0000 aa55 0035 8305 4572 0051  ..%q...U.5..Er.Q
0x0040:  7601 0101 0209 e55e cde4 eb5e cde4 eb18  v......^...^....
0x0050:  fb48 6dcb c14a 0f00 0040 6c00 0000 1001  .Hm..J...@l.....
0x0060:  4d08 2001 9aff be8f 0d00 000a 0000 00    M..............

但是,NodeJS 服務器正在接收以下格式的數據:緩沖區 aa 55 00 35 83 05 45 72 00 51 76 01 01 01 02 0a d8 5e ce 02 58 5e ce 02 58 18 fb 3e b3 cb c1 4d 3f 00 00 3f e7 00 00 00 10 00 fb 0c 20 01 9a ff bc 8f...

那么為什么我們不能接收完整的數據包呢? 因為我們需要完整的數據包來進行發送確認。

var net = require('net');
net.createServer(function (socket) { 
    socket.on('data', function(data) {
        var text = data.toString('hex');
        console.log("data in hex", text);
    });
    socket.on('end', function() {
        console.log('end'); 
    });
    socket.on('close', function() {
        console.log('close');
    });
    socket.on('error', function(e) {
        console.log('error ', e); 
    }); 

    }).listen(3080, function() { 
        console.log('TCP Server is listening on port 3080'); 
    });
});

注意:對不起,我的英語很差。

我遇到了同樣的問題,當緩沖區字符串太長並且你記錄它時,它看起來有點像ff... 2 more bytes>

我設法通過將緩沖區轉換為十六進制來取回我的整個字符串。

var net = require('net');
net.createServer(function (socket) { 
    socket.on('data', function(data) {
        const hexData = data.toString('hex')
        console.log("data in hex", hexData);
    });
  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM