Перво-наперво: если это действительно сервер telnet, то вы должны сделать что-то с установлением связи telnet (где параметры терминала согласовываются между узлами, это двоичные данные, которые вы можете видеть при открытии сокета).
Если вы не хотите вдаваться в это (это будет зависеть от ваших потребностей), вы можете проигнорировать переговоры и перейти прямо к делу, но вам придется читать эти данные и игнорировать их самостоятельно.
Теперь в вашем коде вы отправляете данные, как только сервер принимает соединение.Это может быть причиной ваших неприятностей.Вы не должны «ждать» ответа, ответ будет получен асинхронно благодаря nodejs :) Так что вам просто нужно отправить команды, как только вы получите «правильный» ответ от сервера (это на самом делеполезно, потому что вы можете увидеть, были ли какие-либо ошибки и т. д.).
Я пробовал этот код (на основе вашего) на устройстве, которое у меня под рукой, и имеет сервер telnet.Это сделает вход, а затем выход.Посмотрите, как события отправляются в соответствии с ответом сервера:
var net = require('net');
var conn = net.createConnection(23, '1.1.1.1');
var commands = [ "logout\n" ];
var i = 0;
conn.setEncoding('ascii');
conn.on('connect', function() {
conn.on('login', function () {
conn.write('myUsername\n');
});
conn.on('password', function () {
conn.write('myPassword\n');
});
conn.on('prompt', function () {
conn.write(commands[i]);
i++;
});
conn.on('data', function(data) {
console.log("got: " + data + "\n");
if (data.indexOf("login") != -1) {
conn.emit('login');
}
if (data.indexOf("password") != -1) {
conn.emit('password');
}
if (data.indexOf(">#") != -1) {
conn.emit('prompt');
}
});
});
Посмотрите, как команды находятся в массиве, где вы можете итеративно отправлять их (событие приглашения вызовет следующую команду).Таким образом, правильный ответ от сервера следующий запрос.Когда сервер отправляет (в данном случае) строку> #, отправляется другая команда.
Надеюсь, это поможет:)