【发布时间】:2016-05-05 01:20:57
【问题描述】:
我正在尝试编写一个 Node.js 应用程序,该应用程序将执行与我们在办公室使用的一些 TCP/IP 模块的 TCP 连接。这些模块安装在旧控制台中,因此管理它们的软件非常旧,不再受支持。我们现在操作它们的方式是使用 Windows 中的命令提示符并以这种方式连接它们。以下是我们目前的做法。
>telnet <XX.XX.XX.XX> <PORT>
如果连接成功,我们会得到一个空白屏幕,然后我们在其中输入
<Ctrl+A> 200
where是同时按住Ctrl键和A键,后面跟着数字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);
}
});
但是没有用。提前致谢
【问题讨论】:
标签: javascript node.js command-line tcp-ip