如何在同一个telnet连接上发送多个数据?

时间:2018-05-30 09:51:38

标签: javascript electron telnet

一个电子应用程序,它使用ipcMain和ipcRenderer进程在点击按钮时发送telnet命令以及 npm telnet-client 库,用于桌面应用程序和服务器之间的Telnet连接。远程设备(服务器)。我是承诺的新手,所以无法弄清楚正确的实现。

问题:每次单击按钮时,都会建立新的Telnet会话,并且在20个并发会话后,我的远程设备将无响应。为了解决这个问题,我在connect.exec()在Telnet连接上完成后添加了connection.end(),它通过在发送命令后关闭连接以某种方式改进了功能,但也增加了延迟。然而,我也意识到这不会一直有效,并且会间歇性地跳过连接打开。

问题:如何检查Telnet会话是否已经建立,然后通过现有会话发送命令,而不是每次创建新会话,并在明确关闭后运行。

server.html

<script>
    const {ipcRenderer} = require('electron')
    function sendCommand(channel, arg){
        ipcRenderer.send(channel, arg)
    }
</script>

<button onclick="sendCommand('channel-1', 'command1');">  Command 1 </button>
<button onclick="sendCommand('channel-1', 'command2');">  Command 2 </button>

main.js

const {ipcMain} = require('electron')
var Telnet = require('telnet-client')
var connection = new Telnet()

ipcMain.on('channel-1', (event, arg) => {
  var params = {
    host: '192.168.1.121',
    port: 23,
    shellPrompt: ' ',
    timeout: 1500,
  }

var cmd = arg

  connection.on('ready', function(prompt) {
    connection.exec(cmd, function(err, response) {
    console.log(response)
    })
  })
  connection.on('timeout', function() {
    console.log('socket timeout!')
    connection.end()
  })
  connection.on('close', function() {
    console.log('connection closed')
  })
  connection.connect(params)
})

提前致谢。

1 个答案:

答案 0 :(得分:0)

以下修改帮助我通过现有的telnet通道发送命令而不创建多个telnet会话,现在发送telnet命令的速度很快。

var params = {
  host: '192.168.1.121',
  port: 23,
  shellPrompt: ' ',
  timeout: 1500,
  // removeEcho: 4
}
connection.connect(params)

var cmd = "a temp command"

connection.on('ready', function(prompt) {
  connection.exec(cmd, function(err, response) {
    console.log(response)
  })
})

connection.on('timeout', function() {
  console.log('socket timeout!')
  connection.end()
})

connection.on('close', function() {
  console.log('connection closed')
})

ipcMain.on('channel-1', (event, arg) => {

  cmd = arg

if(connection.getSocket().writable){
  connection.exec(cmd, function(err, response) {
      console.log(response)
  })
}else{
  console.log("connection closed!" + connection.getSocket().writable)
}

})