Я пытаюсь написать приложение Node.js, которое будет выполнять TCP-соединения с некоторыми модулями TCP/IP, которые мы используем в офисе. Эти модули установлены в старых консолях, поэтому программное обеспечение для их управления очень старое и больше не поддерживается. Теперь мы используем их в командной строке Windows и подключаемся к ним таким образом. Вот как мы сейчас это делаем.Node.js TCP-соединения
>telnet <XX.XX.XX.XX> <PORT>
, если соединение прошло успешно, то мы получим пустой экран, в котором мы тогда печатаем
<Ctrl+A> 200
Где удерживая клавишу Ctrl и клавишу А в то же время, за которым следует номер 200 Затем он выдает некоторые простые сведения о модуле, который мы хотим. Этот метод работает для нас, но проблема в том, что это не практично, когда у вас есть 20+ из этих модулей с разными IP-адресами. Мы должны подключаться к ним каждую неделю, чтобы убедиться, что они работают, и 20 из них действительно занимают много времени, поэтому мы хотим оптимизировать этот процесс. Мы начали писать мини-приложение в Node.js, которая заботится о соединениях
var net = require('net');
var HOST_ARR = ['XX.XX.XX.XX'];
var PORT = 10001;
var client = new net.Socket();
var spawn = require('child_process').spawn('cmd');
var exec = require('child_process').exec;
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function connect(host, port){
return new Promise(function(resolve, reject){
client.connect(port, host, function() {
// Write a message to the socket as soon as the client is connected
console.log('CONNECTED TO: ' + host + ':' + port);
/*** EXECUTE <Ctrl+A> 200 COMMAND BEFORE CLOSING THE CONNECTION ***/
resolve('Success');
//end connection
client.destroy();
});
//handle errors
client.on('error', function(err) {
reject(err.code);
});
});
}
Мы можем подключить к модулям просто отлично, и процесс происходит очень быстро. Мы просто зациклились на том, как выполнить command <Ctrl+A> 200
после начала соединения. Какие-либо предложения?
Я попытался
exec('\0x01200', function(error, stdout, stderr) { //ASCII for <Ctrl+A> is \0x01
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
, но не работает. Заранее спасибо
Спасибо за ответ. Это частично решает проблему, однако я получаю только один ответ строки, а не все это. Есть ли способ прочитать все входящие данные? – lomas09
'client.destroy()' может отключить соединение до получения всех входящих данных. Что делать, если 'client.destroy()' заменяется на 'client.end()' в вашем коде? – wikrsh