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

Expo React Native应用无法连接Django WebSocket问题求助

Expo模拟器连接本地Django WebSocket失败的解决办法

问题根源

Expo模拟器里的127.0.0.1指向的是模拟器自身,不是运行Django的电脑主机,所以直接用这个地址连不上本地的WebSocket服务。

具体解决步骤

  • 替换WebSocket连接地址:把代码里的ws://127.0.0.1:8000/ws/awsc/换成你电脑的局域网IP地址。比如你的电脑局域网IP是192.168.3.5,就改成ws://192.168.3.5:8000/ws/awsc/。
    • 查局域网IP的方法:Windows打开命令提示符输入ipconfig,找无线/以太网适配器的IPv4地址;Mac/Linux打开终端输入ifconfig或ip addr,对应网卡的inet地址就是。
  • 确保Django服务允许外部访问:启动Django时,用python manage.py runserver 0.0.0.0:8000,这样服务会监听所有网卡的8000端口,模拟器才能访问到。
  • 检查防火墙:确认电脑防火墙没有拦截8000端口的入站连接,开发环境可以临时关闭防火墙测试。
  • 添加错误监听:在代码里加上onerror事件,方便排查连接失败的具体原因。

修改后的完整代码

useEffect(() => {
    // 替换为你的电脑局域网IP
    const ws = new WebSocket('ws://192.168.3.5:8000/ws/awsc/');
    ws.onopen = (event) => {
      console.log('ws opened');
      // onopen事件的event.data通常为undefined,无需打印
    };
    ws.onmessage = function (event) {
      console.log(event.data);
    };
    ws.onclose = function (event) {
      console.log("closed, code is:", event.code);
    };
    ws.onerror = function (error) {
      console.error("WebSocket连接错误:", error);
    };
    return () => ws.close();
  }, []);

额外提示

  • iOS模拟器偶尔可以用localhost访问,但稳定性不如局域网IP,优先推荐用局域网IP。
  • 确认Django的Channels配置正确,WebSocket路由/ws/awsc/已经在routing.py里正确注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:33:16