You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Electron应用中Error: connect EISCONN ::1:5555错误?

问题分析与解决方案

错误根源

Error: connect EISCONN ::1:5555 是因为你在TCP服务器的客户端连接回调中,对已经处于连接状态的套接字再次调用了connect()方法。

在net.createServer()的回调函数里,参数socket是客户端发起连接后,服务器端自动创建的已连接套接字,此时它已经和客户端建立了连接,不需要再调用socket.connect()去连接端口——这会导致尝试对一个已连接的套接字发起新连接,触发EISCONN(Socket is already connected)错误。

修复代码

1. 移除错误的socket.connect()调用

直接删除两处net.createServer回调里的socket.connect(settings.port)语句即可解决核心错误。

2. 优化后的核心服务器代码(以mainWindow-ready中的服务器为例)

server = net.createServer(socket => {
    // 移除错误的socket.connect调用
    socket.setKeepAlive(true);

    // 原有的数据处理逻辑保留,增加错误捕获
    socket.on("data", data => {
        try {
            const rawData = data.toString().split("\n")[17].split(",");
            const parsedData = {
                id: rawData[0],
                state: rawData[1],
                updated_at: rawData[2],
                hostname: rawData[3],
                admin: rawData[4],
                level: rawData[5],
                purchased: rawData[6],
                connected: rawData[7],
                backdoored: rawData[8],
                cores: rawData[9],
                ram: {
                    used: rawData[10],
                    max: rawData[11],
                    free: rawData[12],
                    trueMax: rawData[13]
                },
                power: rawData[14],
                organisation: rawData[15],
                isHome: rawData[16],
                ports: {
                    required: rawData[17],
                    open: rawData[18],
                    ftp: rawData[19],
                    http: rawData[20],
                    smtp: rawData[21],
                    sql: rawData[22],
                    ssh: rawData[23]
                },
                security: {
                    level: rawData[24],
                    min: rawData[25]
                },
                money: {
                    available: rawData[26],
                    max: rawData[27],
                    growth: rawData[28]
                }
            };
            mainWindow.webContents.send("data-recieved", parsedData);
        } catch (err) {
            console.error("数据解析失败:", err);
        } finally {
            socket.destroy();
        }
    });

    // 增加套接字错误监听,避免未捕获异常
    socket.on("error", err => {
        console.error("套接字错误:", err);
    });
});

3. 其他优化建议

  • 代码复用:把服务器创建逻辑抽成单独函数,避免mainWindow-ready和setting-update里重复写相同代码:
    function createTCPServer(port) {
        return net.createServer(socket => {
            socket.setKeepAlive(true);
            // 数据处理逻辑...
        });
    }
    
  • Electron安全设置:webPreferences中nodeIntegration: true在contextIsolation: true时会被忽略,建议保持contextIsolation: true,通过preload脚本暴露API,而非开启nodeIntegration。
  • 文件操作修正:fs.writeFileSync是同步方法,不需要传入回调函数,修正为:
    fs.writeFileSync(path.join(__dirname, 'settings.json'), JSON.stringify(settings));
    
  • 服务器关闭时机修正:app.on('close')事件不存在,改为在before-quit事件中关闭服务器:
    app.on('before-quit', () => {
        if (server) server.close();
    });
    

验证修复

移除socket.connect()调用后,启动应用时服务器会正常监听指定端口,客户端连接后可正常接收数据,不会再触发EISCONN错误。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:44:55