@Galdar
Web, JS, PHP, NGINX, Linux

Как принимать необработанные данные?

Честно сказать да же не знаю как назвать этот вопрос. Приходят данные от прибора, а при получении их и выводе в лог файл через NGINX и NET SOCKET вижу по разному.

NGINX выдает в виде - "\x01\x17\x80\x01\x96\x02\x18\x03864006049200006\x042\x00By" 400 157 "-" "-"
NET SOCKET так - <\Buffer 01 17 80 01 96 02 18 03 38 36 34 33 37 36 30 34 39 32 30 34 31 36 36 04 32 00 42 79\>

Хочу в NET SOCKET получать данные как в NGINX, просто потому что их так проще разбить на нужные части. При выводе Буфера получается все в строку и это совсем не удобно. Ответ получается 864006049200006By, а если он еще и перемешан или приходит в другом порядке, как понять что к чему.

Сами данные отправляются по протоколу tcp. Вот мой кривой кусок кода:
Кусок го*на
const PORT = 6020;
var  crc16  =  require ('js-crc').crc16;

var net = require('net');
var server = net.createServer();

var clients = [];

net.createServer( (socket) => {

socket.name = socket.remoteAddress + ":" + socket.remotePort;

clients.push(socket);

socket.on('data', (data) => {

    console.log(data)
    console.log(data.toString("utf8"))
    
    //broadcast(socket.name + " message: " + data, socket);
    console.log( crc16(data) )
    socket.write( crc16(data) );
    
});

socket.on('end', () => {
    
    console.log('end')
    clients.splice(clients.indexOf(socket), 1);

});

}).listen(PORT);

console.log(`TCP Server running at localhost port ${PORT}\n`);


Дайте совет или пример как мне получать адекватные заголовки и разбивать их. Чтобы можно было выстроить адекватную структуру получаемых данных.
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 1
Robur
@Robur
Знаю больше чем это необходимо
вы можете использовать Buffer.toString() с нужной кодировкой чтобы получить строку.
например Buffer.toString('hex') выдаст вам '0117800196...', каждые две цифры - один байт.
или другие кодировки попробуйте, если так не устраивает.
но вообще работать лучше с данными в их первоначальном виде - с числами. вместо '\x01' вы берете первый байт и получаете 1. вместо "\x0386400604920000" вы берете байты попорядку и получаете 3 86 40 06 04 и тд.
Это куда удобнее, чем пытаться разбирать строку, которая случайно получилась из этих данных.
Если хотите прямо вот 1в1 как в nginx, то найдите как оно там форматируется и напишите такое же. Вопрос зачем конечно остается.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы