2016-05-04 2 views
0

Я пытаюсь написать приложение 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); 
    } 
}); 

, но не работает. Заранее спасибо

ответ

0

Как насчет отправки <Ctrl+A>200 по client после подсоединенного, как:

client.write(new Buffer([ 
    0x01, // Ctrl-A 
    0x32, // 2 
    0x30, // 0 
    0x30, // 0 
    // uncomment if necessary 
    // 0x0d, // \r 
    // 0x0a, // \n 
])); 
+0

Спасибо за ответ. Это частично решает проблему, однако я получаю только один ответ строки, а не все это. Есть ли способ прочитать все входящие данные? – lomas09

+0

'client.destroy()' может отключить соединение до получения всех входящих данных. Что делать, если 'client.destroy()' заменяется на 'client.end()' в вашем коде? – wikrsh