【问题标题】:Node.js TCP ConnectionsNode.js TCP 连接
【发布时间】: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 &lt;Ctrl+A&gt; 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


    【解决方案1】:

    连接后通过client 发送&lt;Ctrl+A&gt;200 怎么样:

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

    【讨论】:

    • 感谢您的回复。这部分解决了这个问题,但是我只得到一个线路响应而不是整个事情。有没有办法读取整个传入数据?
    • client.destroy() 可能会在收到整个传入数据之前关闭连接。如果client.destroy() 在您的代码中被替换为client.end() 会怎样?
    猜你喜欢
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2014-07-09
    • 2014-03-19
    • 2018-05-02
    • 1970-01-01
    相关资源
    最近更新 更多