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

Electron.js+Socket.io报错:ERR_NAME_NOT_RESOLVED 求解决方案

错误:net::ERR_NAME_NOT_RESOLVED 解决方案

问题原因

Electron通过file://协议加载本地index.html时,前端代码中var socket = io()未指定Socket.IO服务器地址,客户端会默认沿用当前页面的file协议拼接连接路径,导致请求不存在的http://file/socket.io/地址,最终触发域名解析失败的错误。

修复步骤与代码修改

1. 明确指定前端Socket.IO连接地址

修改index.html中的Socket.IO初始化代码,直接指向运行在本地3000端口的服务器:

<script src="node_modules/socket.io-client/dist/socket.io.js"></script>
<script>
  // 指定服务器地址,避免默认使用file协议
  var socket = io('http://localhost:3000')

  socket.on('connect', () => {
    console.log('已连接到Socket.IO服务器')
  })

  socket.on('atualizarEstado', estadoDoJogo => {
    // 处理从服务器接收的游戏更新数据
    // ...
  })
</script>
<script src="menu.js"></script>
<script src="game.js"></script>
<script src="player1.js"></script>
<script src="player2.js"></script>

2. 优化服务器启动流程

在package.json中添加启动服务器的脚本,方便同时启动服务器与Electron:

{
  "name": "battlemath",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "electron .",
    "server": "node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron": "^25.2.0"
  },
  "dependencies": {
    "electron-reload": "^2.0.0-alpha.1",
    "express": "^4.18.2",
    "socket.io": "^4.7.0",
    "socket.io-client": "^4.7.0"
  }
}

使用时先执行npm run server启动Socket.IO服务器,再执行npm start启动Electron应用。

3. 可选:统一Socket.IO连接逻辑

当前Electron主进程与渲染进程(前端)各自创建了Socket.IO连接,若无需双端独立连接,可二选一优化:

  • 若仅通过主进程处理Socket.IO通信,可移除前端的Socket.IO代码,通过Electron的IPC机制在主进程与渲染进程间传递数据。
  • 若保留渲染进程的连接,可根据需求删除主进程中的Socket.IO相关代码。

额外注意事项

  • 确保server.js中server.listen(3000)正常监听端口,无端口占用冲突。
  • Electron的webPreferences中nodeIntegration: true在新版本中已不推荐,建议后续改用contextIsolation: false配合preload脚本的方式实现进程间通信。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:42:01