使用 net nodejs 模块单击按钮连接到套接字服务器

connect to socket server on button click using net nodejs module

我正在开发一个用于通过 TCP 控制 ESP8266 继电器的电子应用程序。 ESP8266 在我本地网络的端口 8080 上有一个 TCP 服务器 运行。 下面的基本代码有效。 ESP8266 接受连接和指令以打开 on/off 继电器也工作。

const electron = require('electron')
var net = require('net');

var HOST = '192.168.0.33';
var PORT = 8080;

var socket = new net.Socket();

socket.connect(PORT, HOST, function() {
  console.log('CONNECTED TO: ' + HOST + ':' + PORT);    
});

但现在我想在我的 Electron 应用程序中按一下按钮来建立此连接 "socket.connect",这样我就可以在需要时使用输入字段更改 IP 地址。否则 IP 地址是硬编码的。

以下代码不起作用:

const electron = require('electron')    
var net = require('net');

const turnOn = new Buffer([0xA0, 0x01, 0x00, 0xA1]);
const turnOff = new Buffer([0xA0, 0x01, 0x01, 0xA2]);

var socket = new net.Socket();

const connectBtn = document.getElementById('connectBtn');
const onBtn = document.getElementById('onBtn');
const offBtn = document.getElementById('offBtn');

connectBtn.addEventListener('click', function(event) {
  console.log("clicked connect");
  var ipAddress = document.getElementById('ipAddress').value;
  var port = document.getElementById('port').value;    
  socket.connect(port, ipAddress, function() {
    console.log('CONNECTED TO: ' + ipAddress + ':' + port);    
  });
})

也就是说。如果我将 "socket.connect" 放在连接按钮单击事件之外,我的应用程序将连接到 ESP8266。 如果我将 "socket.connect" 放入“连接”按钮单击事件中,则不会发生连接。

是否有其他方法可以在运行时根据需要更改 IP 地址?

这是我正在尝试构建的应用程序的屏幕截图:

当Socket host是ip而不是domain时,我也有同样的问题。也许这是Electron的错误。升级到electron3.0,修复Socket.connect。