You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Electron+Angular应用搭建TCP服务器无响应问题求助

排查Electron主进程TCP服务器无响应的问题

我帮你梳理下几个最可能导致服务器没启动的原因,按顺序排查应该能解决:

1. 务必添加错误监听,捕获启动失败的原因

你的服务器代码里没有监听error事件,这就导致即使绑定端口失败(比如端口被占用、权限不足),你也看不到任何提示。先给服务器加上错误监听:

server.on('error', (err) => {
  console.error('服务器启动/运行出错:', err);
  // 常见错误比如EADDRINUSE(端口被占用)、EACCES(权限不够,比如用1024以下端口需要管理员权限)
});

2. 确认HOST和PORT的定义正确且可用

你代码里的HOSTPORT变量没有给出定义,要确保:

  • HOST设为'127.0.0.1'(仅本地访问)或'0.0.0.0'(允许所有地址访问),不要用无效的IP地址
  • PORT要选一个未被占用的端口(比如你客户端用的2000,要确保没有其他程序在监听它)

可以用Windows命令行验证端口是否被占用:

netstat -ano | findstr :2000

如果有输出,说明端口被其他进程占用,换个端口或者关闭占用的进程。

3. 确保服务器代码在Electron的ready事件后执行

Electron主进程需要等待应用完全就绪后再启动服务,否则可能因为环境未初始化导致绑定失败。把你的服务器代码放到app.on('ready', ...)回调里:

const { app } = require('electron');
const net = require('net');

const HOST = '127.0.0.1';
const PORT = 2000;
let sockets = [];

app.on('ready', () => {
  const server = net.createServer();
  
  // 先加错误监听
  server.on('error', (err) => {
    console.error('服务器错误:', err.message);
  });

  server.listen(PORT, HOST, () => {
    console.log('Server listening on ' + HOST +':'+ PORT);
  });

  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);
    });
    
    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...')放到了server.listen()的回调里,这样只有当服务器成功监听后才会输出,结果更准确。

4. 排查系统防火墙/杀毒软件的拦截

Windows防火墙或者杀毒软件可能会阻止Electron应用监听端口,导致服务器看似没启动(其实已经启动但无法被访问)。可以临时关闭防火墙测试,或者给你的Electron应用添加防火墙允许规则。

5. 验证服务器是否真的在监听

用刚才的netstat命令查看对应端口是否有Electron进程在监听,如果有,说明服务器已经启动,可能是客户端连接的问题;如果没有,回到前几步排查启动失败的原因。

按这个顺序排查,应该能找到问题所在!

内容的提问来源于stack exchange,提问作者Marco

火山引擎 最新活动