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

How to send multiple pieces of data on same telnet connection?

一个 Electron 应用程序,它使用 ipcMain 和 ipcRenderer 进程在单击按钮时发送 telnet 命令以及 npm telnet-client 库用于桌面应用程序和远程设备之间的 Telnet 连接(服务器)。我是 promises 的新手,所以无法找到正确的实现方式。

问题:每次单击按钮时都会建立一个新的 Telnet 会话,并且我的远程设备在二十个并发会话后变得无响应。为了克服这个问题,我在 connection.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)
})

提前致谢。

以下修改帮助我通过现有的 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)
}

})