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

外部网络访问create-react-app后无法连接Python WebSocket服务器怎么办?

问题排查与解决思路

你的问题核心在于外部设备加载React应用后,WebSocket连接的目标地址错误,再加上端口转发和可能的防火墙配置缺失,导致连接失败。下面是一步步的排查和解决方法:

1. 修正React应用中的WebSocket连接地址

你在App.js里写的const URL = 'ws://localhost:8765',这个地址在本地测试时没问题,但外部设备访问时,浏览器会把localhost解析成设备自身的本地地址,而不是运行WebSocket服务器的电脑IP。

解决方法:

  • 如果你是局域网内测试,直接把localhost替换成WebSocket服务器所在电脑的局域网IP(比如192.168.1.100):
    const URL = 'ws://192.168.1.100:8765';
    
  • 如果是外网测试,替换成你的路由器公网IP:
    const URL = 'ws://你的公网IP:8765';
    
  • 更灵活的动态配置方式:让React应用自动适配当前访问的IP,避免硬编码:
    // 根据当前页面协议自动选择ws/wss
    const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
    // 用当前页面的主机IP拼接WebSocket地址
    const URL = `${protocol}//${window.location.hostname}:8765`;
    

2. 配置路由器的8765端口转发

你只转发了React应用的3000端口,但WebSocket服务器用的是8765端口,必须在路由器上新增一条端口转发规则:

  • 外部端口:8765
  • 内部IP:运行WebSocket服务器的电脑的局域网IP(比如192.168.1.100)
  • 内部端口:8765
  • 协议选择TCP(WebSocket基于TCP协议)

3. 检查服务器电脑的防火墙设置

运行WebSocket服务器的电脑可能开启了防火墙,阻止了外部设备访问8765端口:

  • Windows:打开「Windows Defender防火墙」,新增入站规则,允许8765端口的TCP连接。
  • Linux:通过命令开放端口,比如ufw allow 8765/tcp。

4. 确认WebSocket服务器的绑定配置

你的Python服务器代码里用了websockets.serve(echo, '', 8765),这里的空字符串等价于0.0.0.0,表示监听所有可用的网络接口,这个配置是正确的,不需要修改——这样服务器才能接收来自外部设备的连接请求。

测试验证步骤

  1. 先在局域网内用另一台设备测试WebSocket连接:用在线WebSocket测试工具访问ws://服务器局域网IP:8765,确认能正常连接。
  2. 再测试外网连接:用公网IP+8765端口测试WebSocket连通性。
  3. 最后通过React应用完整测试整个流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:35:02