Node.js tcp сервер ответа - PullRequest
2 голосов
/ 19 июля 2011

Я пытаюсь создать простой сервер ответов в node.js

Проблема, с которой я сталкиваюсь, заключается в том, что когда я telnet на сервер и отправляю привет, цикл if не перехватывает его, и он переходит к остальному.

Ниже мой код:

var net = require('net');

var server = net.createServer(function(socket) {
// Server start
socket.write('Welcome\n');

socket.on('data', function(data) {

        dataReceived(socket, data);
    }); 

});

server.listen(8250);

function dataReceived(socket, data) {
    if(data == 'hello') {
    socket.end('Hi');
    } else {
    socket.write(data);
    socket.end('what??\n');
}
}

Спасибо.

Ответы [ 2 ]

7 голосов
/ 19 июля 2011

Данные - это двоичный буфер, а не строка.См. http://nodejs.org/docs/v0.4.9/api/buffers.html.

Используйте метод buffer.toString для преобразования в строку.

Кроме того, новая строка будет добавлена ​​при нажатии enter в telnet.Не уверен, что окончания строк меняются по оси, но в этом случае я зачистил \r\n.

function dataReceived(socket, data) {
  data = data.toString('utf8').replace(/\r\n/, '');

  if(data == 'hello') {
    socket.end('Hi');
  } else {
    socket.write(data);
    socket.end('what??\n');
  }
}
2 голосов
/ 20 июля 2011

Как уже упоминалось, основная проблема заключается в том, что вы сравниваете объект Buffer со строкой.

Существует еще одна проблема, которая, скорее всего, не видна в вашем примере.

Вы не можете контролировать, как данные разбиваются на пакеты. «Hello», отправленное на ваш сервер, может привести к тому, что dataReceived будет вызываться с буфером «Hel» + «l» + «o» 3 раза

Правильный способ обработки ввода «Hello» позволяет нам создать конечный автомат или, что более просто и менее эффективно, - буферизовать все входящие данные, найти «Hello» в начале буферизованных данных, а затем вырезать обработанные данные из буфера. Существуют модули, предназначенные для помощи в распаковке / восстановлении структурированных данных из входного потока, например node-binary

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...