如何在同一个 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)
}
})
一个 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)
}
})