Node.js Net Socket客户端连接C# .NET服务端报ECONNREFUSED错误如何解决
问题排查可能原因
1. C#服务端监听配置问题
- 最常见的情况是你的.NET服务端仅绑定了IPv6回环地址
::1,未开启IPv4兼容:Node.js的net模块默认优先用IPv4请求127.0.0.1,如果服务端只监听IPv6的11111端口就会被拒绝。你可以在Windows下执行netstat -ano | findstr 11111查看监听地址,若仅显示[::]:11111或::1:11111就属于这个问题。修复方式可以把C#服务端监听地址改成0.0.0.0(监听所有IPv4网卡),或者开启.NET的IPv4映射到IPv6的配置。 - 确认服务端没有做IP白名单限制,比如仅允许特定进程、特定IP段的客户端连接,把Node.js的请求拦截了。
2. Node.js代码写法问题
- 你当前的端口参数传了字符串格式:
socket.connect('11111','127.0.0.1'),按照Node.js官方文档要求,端口参数应为数字类型,部分低版本Node.js对字符串端口的解析存在异常,可修改为socket.connect(11111, '127.0.0.1')验证。 - 你的连接逻辑在模块导入时就会立即执行,没有任何错误监听兜底,建议修改为按需调用的初始化函数,同时添加错误监听定位问题:
// socketInit.js修改示例 const net = require("net"); const socket = new net.Socket(); function initSocket() { socket.connect(11111, '127.0.0.1'); socket.on('error', (err) => { console.log('Socket连接错误:', err); }) } exports.initSocket = initSocket; exports.socket = socket;
使用时手动调用initSocket()触发连接,避免导入时的未知问题。
3. Electron运行环境问题
net是Node.js原生模块,仅能在Electron主进程中使用,如果你导入的位置是渲染进程,且开启了Electron的沙箱模式、上下文隔离,会导致模块调用异常,触发连接失败。需要把Socket逻辑放到主进程执行,通过IPC和渲染进程通信。- 检查Electron的代理配置:如果你的Electron应用配置了全局代理,本地回环地址的请求也可能被转发到代理服务,代理无法访问11111端口就会返回连接拒绝。
4. 系统层面拦截问题
- 检查Windows防火墙/第三方安全软件配置:安全软件可能对不同程序的出站请求做了限制,你的C#测试程序已经被加了白名单,但是Electron进程(开发阶段的electron.exe、打包后的客户端exe)的出站请求被拦截,导致无法连接本地端口。
- 确认运行Electron时,C#服务端确实处于运行状态,且11111端口没有被其他进程临时占用。
内容的提问来源于stack exchange,提问作者Kim Sandberg
相关产品推荐
相关产品推荐

