Socket.io出现ERR_CONNECTION_REFUSED错误 请求技术协助
解决Socket.io连接ERR_CONNECTION_REFUSED问题
我帮你排查了代码里的关键问题,咱们一步步来解决这个连接拒绝的故障:
1. 服务器端Socket.io绑定错误
你在代码里已经创建了独立的HTTP服务器实例server,并且把Socket.io绑定到了这个实例上,但最后启动服务时却用了app.listen()——这会创建一个全新的HTTP服务器,和你绑定Socket.io的那个不是同一个!这就导致Socket.io根本没在8080端口运行,客户端自然连不上。
修改server.js的启动代码
把原来的:
app.listen(port); console.log("App listening on port " + port);
替换成:
server.listen(port); console.log("App listening on port " + port);
这样Socket.io和Express就共用同一个HTTP服务器,8080端口就能同时处理HTTP请求和Socket连接了。
2. 客户端连接地址问题
如果你的Ionic App是在模拟器/真机上运行,localhost指向的是设备本身,而不是你的开发电脑。你需要把连接地址改成电脑的局域网IP(比如你代码注释里的192.168.0.102):
修改客户端连接代码
把:
this.socket = io('ws://localhost:8080', { transports: ['websocket'] })
替换成:
this.socket = io('http://192.168.0.102:8080', { transports: ['websocket'] })
注意:用
http协议即可,Socket.io会自动完成WebSocket协议升级;确保你的设备和开发电脑在同一个局域网内。
额外排查建议
- 重启Node服务器,确保修改后的代码生效;
- 在客户端的
connect_error事件里打印错误详情,方便定位更细节的问题:this.socket.on('connect_error', (error) => { this.connectionError = "0"; console.error('Socket连接错误详情:', error); // 新增日志 }) - 再次确认防火墙没有拦截8080端口,或者临时关闭防火墙测试。
修改完成后,应该就能正常建立Socket连接了。
内容的提问来源于stack exchange,提问作者Arun-
相关产品推荐
相关产品推荐

