space2pacman
@space2pacman
Просто царь.

Как правильно получать пакеты через node.js tcp сервер?

Есть tcp сервер на node.js через стандартный модуль net.
Есть клиент, который отправляет пакеты в кодировке ascii.
Кодировка на сервере стоит такая: socket.setEncoding("ascii");

Проблема в том, что пакеты проходят "битые".

Если слушать через wireshark то там все ок.
Пакет wireshark (Выделил некоторые различающиеся байты):
32 00 3c 07 53 ab 4f 6f c5 3c f4 22 45 c2 41 0e 38 8c ce 39 53 23 ac e1 27 9a 0d 2d 41 44 78 22 29 b6 76 62 4a 79 fe 01 ed 06 c1 fc 6b 14 03 1b 86 cd


Пакет через node.js tcp:
32 00 3c 07 53 2b 4f 6f 45 3c 74 22 45 42 41 0e 38 0c 4e 39 53 23 2c 61
27 1a 0d 2d 41 44 78 22 29 36 76 62 4a 79 7e 01 6d 06 41 7c 6b 14 03 1b 06 4d


Как можно повлиять на это ? Может какой-то другой модуль использовать для tcp сервера ?
  • Вопрос задан
  • 385 просмотров
Решения вопроса 2
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
Может стоит внимательно читать доку?
https://nodejs.org/api/buffer.html#buffer_buffers_...
'ascii' - For 7-bit ASCII data only. This encoding is fast and will strip the high bit if set.

ясно же написано, 7-битная кодировка, старший бит срезается, что и происходит в Вашем случае
Ответ написан
space2pacman
@space2pacman Автор вопроса
Просто царь.
Тот момент когда в официальной документации ни слова. https://nodejs.org/api/net.html

Оказывается есть еще одна кодировка: "binary" и именно ее надо устанавливать по-умолчанию для сокета и так же при чтении из буфера. Нашел все Тут

socket.setEncoding("binary");
socket.on("data", data => {
	var raw = new Buffer.from(data, "binary");
})


UPD: все же есть слова о кодировке но не там где ожидаешь.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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