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

同局域网设备无法访问Socket.IO,添加3000端口防火墙规则仍无效求助

解决局域网内Socket.IO服务防火墙下无法访问的问题

针对你遇到的问题,从几个关键方向排查和修复:

1. 修正服务器监听地址(最可能的原因)

当前代码中httpServer.listen(3000)默认仅监听本地回环地址(127.0.0.1),这会导致局域网其他设备无法连接。需要修改监听地址为0.0.0.0(允许所有网卡接入)或者服务器的局域网IP:

httpServer.listen(3000, '0.0.0.0', () => {
  console.log('Server is running on port 3000');
});

这样服务器才会接收来自局域网其他设备的连接请求。

2. 检查防火墙规则的完整性

  • 确保规则是入站规则,且针对TCP协议(Socket.IO握手和WebSocket都基于TCP)。
  • 验证规则应用的网卡范围:不要只限制回环网卡,要包含局域网对应的网卡(比如以太网、Wi-Fi网卡)。
  • 检查规则优先级:如果防火墙有全局拒绝规则,要保证3000端口的允许规则排在拒绝规则之前。
  • 用命令验证规则是否生效:
    • Linux(ufw防火墙):sudo ufw status,确认3000/tcp处于ALLOW状态。
    • Windows:打开「Windows Defender防火墙高级设置」,检查入站规则中3000端口的规则是否已启用且覆盖正确范围。

3. 调整CORS配置以适配局域网客户端

当前CORS的origin仅允许http://192.168.2.38,如果客户端来自局域网内其他IP(比如192.168.2.40),会被CORS拦截。可以修改为允许整个局域网段:

const io = new Server(httpServer, {
  cors: {
    origin: /http:\/\/192\.168\.2\.\d+/, // 匹配192.168.2.x的所有IP
    methods: ['GET', 'POST'],
    credentials: true,
  },
});

开发环境下也可以临时设置origin: true允许所有来源,但生产环境建议严格限定IP范围。

4. 验证端口监听状态

用命令确认3000端口确实监听在正确地址:

  • Linux:netstat -anp | grep 3000,查看输出中LISTEN对应的地址是否为0.0.0.0:3000或192.168.2.38:3000。
  • Windows:netstat -ano | findstr :3000,确认监听地址不是127.0.0.1:3000。

内容的提问来源于stack exchange,提问作者Chadaphorn ทองภูธร

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:32:48