Javascript 电子TCP服务器

Javascript 电子TCP服务器,javascript,node.js,angular,tcp,electron,Javascript,Node.js,Angular,Tcp,Electron,我正在构建和Electron+Angular应用程序,我想让“Electron”部分也成为一个TCP服务器,允许多个客户端连接 我正在使用的版本: 角度CLI:8.0.6 节点:10.15.3 操作系统:win32 x64 角度:8.0.3 NPM: 6.4.1 我正在尝试为NodeJS使用“net”包,但我不是专家。当我尝试将Electron应用程序作为客户端时,一切都很好(这里的示例代码) 然而,当我试图让它充当一个服务器时,什么都不起作用,没有错误消息,没有未经检查的行为(除了服务器没有运

我正在构建和Electron+Angular应用程序,我想让“Electron”部分也成为一个TCP服务器,允许多个客户端连接

我正在使用的版本:

  • 角度CLI:8.0.6
  • 节点:10.15.3
  • 操作系统:win32 x64
  • 角度:8.0.3
  • NPM: 6.4.1
  • 我正在尝试为NodeJS使用“net”包,但我不是专家。当我尝试将Electron应用程序作为客户端时,一切都很好(这里的示例代码)

    然而,当我试图让它充当一个服务器时,什么都不起作用,没有错误消息,没有未经检查的行为(除了服务器没有运行的事实)

    服务器代码示例:

    var net = require('net');
    
    const server = net.createServer();
    server.listen(PORT, HOST);
    
    let sockets = [];
    
    server.on('connection', function(sock) {
        console.log('CONNECTED: ' + sock.remoteAddress + ':' + sock.remotePort);
        sockets.push(sock);
    
        sock.on('data', function(data) {
            console.log('DATA from ' + sock.remoteAddress + ': ' data);
        });
    
        // Add a 'close' event handler to this instance of socket
        sock.on('close', function(data) {
            let index = sockets.findIndex(function(o) {
                return o.remoteAddress === sock.remoteAddress && o.remotePort === sock.remotePort;
            })
            if (index !== -1) {
                sockets.splice(index, 1);
            }
            console.log('CLOSED: ' + sock.remoteAddress + ' ' + sock.remotePort);
        });
    });
    
    console.log('Server listening on ' + HOST +':'+ PORT);
    
    这在作为Electron主进程启动的main.js文件中运行。主进程和渲染进程(其中显示Angular)工作正常,但服务器未运行


    我错过了什么?提前感谢……

    您观察到发生了什么?当客户端尝试连接时,是否出现错误?仅供参考,您还应该有
    client.on('error',err=>console.log(err))因此您正在记录任何连接或套接字错误。也应该在服务器端记录错误
    server.on('error',err=>console.log(err))。谢谢@jfriend00的提示!我将尝试记录错误。。。我没有收到任何与连接或任何其他相关的日志,我只是让Electron应用程序工作(显示角度web视图),而没有任何与服务器相关的消息。。。我将尝试记录服务器错误并让您知道!尝试没有显示任何内容。。。在服务器端,我的意思是,客户端是用C++编写的,它只是一个在ARDUNO上运行的软件的仿真器。在传统的node.js应用程序上,同样的代码也可以完美地工作。问题不在代码上,而是在Electron如何管理服务器侦听器进程的某个地方,我不知道这是什么,因为我没有收到任何消息。。。这就像它根本没有运行一样……好吧,您需要在客户端连接时查找错误。由于您在服务器上没有收到任何有关传入连接的消息,因此错误可能总是发生在这个位置。也许您的端口错了。C++是使用CasyCutoCub类在C++中实现的。我从客户端得到的错误是错误10035,描述为“WSAEWOULDBLOCK非阻塞套接字操作无法立即完成”。考虑到nodejs中完全相同的代码可以完美地工作并接受传入的连接,这不是很具有指示性。在电子发射时,它不会。。。
    
    var net = require('net');
    
    const server = net.createServer();
    server.listen(PORT, HOST);
    
    let sockets = [];
    
    server.on('connection', function(sock) {
        console.log('CONNECTED: ' + sock.remoteAddress + ':' + sock.remotePort);
        sockets.push(sock);
    
        sock.on('data', function(data) {
            console.log('DATA from ' + sock.remoteAddress + ': ' data);
        });
    
        // Add a 'close' event handler to this instance of socket
        sock.on('close', function(data) {
            let index = sockets.findIndex(function(o) {
                return o.remoteAddress === sock.remoteAddress && o.remotePort === sock.remotePort;
            })
            if (index !== -1) {
                sockets.splice(index, 1);
            }
            console.log('CLOSED: ' + sock.remoteAddress + ' ' + sock.remotePort);
        });
    });
    
    console.log('Server listening on ' + HOST +':'+ PORT);