2016-05-04 35 views
0

オフィスで使用するいくつかのTCP/IPモジュールへのTCP接続を実行するNode.jsアプリケーションを作成しようとしています。これらのモジュールは古いコンソールにインストールされているため、それらを管理するソフトウェアは非常に古く、もはやサポートされていません。私たちが今それらを操作する方法は、Windowsでコマンドプロンプトを使用して、そのように接続することです。ここに私たちが現在それをやっているところがあります。Node.js TCP接続

>telnet <XX.XX.XX.XX> <PORT> 

接続に成功したならば、我々はその後、数200に続いて、Ctrlキーと同時にAキーを保持している

<Ctrl+A> 200 

を入力する空白の画面を取得しますモジュールの簡単な詳細を表示します。これは私たちが望むものです。この方法は私たちのために働きますが、それぞれ異なるIPを持つ20以上のモジュールがある場合は、実際的ではないという問題があります。彼らが働いていることを確認するために毎週彼らに連絡しなければなりません。そして、20人が本当に多くの時間を費やすので、プロセスを最適化したいと思います。私たちは、接続

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); 
    }); 
    }); 
} 

我々はうまくモジュールに接続することができ、そしてプロセスは非常に高速であるの世話をNode.jsの中のミニアプリを書き始めました。一度接続が開始されると、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

どのようにだけ接続と同様に後client<Ctrl+A>200の送信について:応答のための

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

感謝を。これは部分的に問題を解決しますが、私は全部ではなく1行の応答しか得ません。入ってくるデータ全体を読む方法はありますか? – lomas09

+0

'client.destroy()'は、受信データ全体が受信される前に接続をシャットダウンすることがあります。あなたのコードで 'client.destroy()'が 'client.end()'に置き換えられたらどうなりますか? – wikrsh