Как отправить несколько частей данных по одному соединению telnet? - PullRequest
0 голосов
/ 30 мая 2018

Приложение Electron, которое использует процессы ipcMain и ipcRenderer для отправки команд telnet одним нажатием кнопки вместе с npm telnet-client библиотекой для подключения Telnet между настольным приложением и удаленным устройством (сервером).Я новичок в обещаниях, поэтому не смог разобраться в правильной реализации.

Проблема: при каждом нажатии кнопки устанавливается новый сеанс Telnet, и мое удаленное устройство перестает отвечать на запросы после двадцати одновременных сеансов.Чтобы преодолеть это, я добавил connection.end () после завершения connection.exec () в соединении Telnet, что несколько улучшает функциональность, закрывая соединение после отправки команды, но также добавляет задержку.Однако я также понял, что это не работает все время и периодически пропускает, оставляя соединение открытым.

Вопрос: как я могу проверить, установлен ли уже сеанс 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 голосов
/ 31 мая 2018

Следующая модификация помогла мне отправить команды по существующему каналу 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)
}

})
...