You need to enable JavaScript to run this app. Expo React Native安卓及iOS端无法连接Socket.IO问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Expo React Native安卓及iOS端无法连接Socket.IO问题求助

问题根因

你遇到的连接失败核心原因是 localhost 指向逻辑差异:浏览器运行在开发机上,localhost 指向开发机本身;但iOS实体机/安卓模拟器的localhost指向的是移动设备自身,自然无法访问到运行在开发机上的Socket.IO服务。

分步解决方法
  • 第一步:替换服务端监听地址
    服务端监听地址改为0.0.0.0,允许局域网内其他设备访问,修改后服务端启动代码:
    server.listen(PORT, '0.0.0.0', () => console.log(`Server Running on Port: http://0.0.0.0:${PORT}`));
    
  • 第二步:替换客户端连接地址
    先查询开发机的局域网IP(例如Windows用ipconfig,Mac/Linux用ifconfig,一般是192.168.x.xxx格式),将客户端Socket连接地址替换为该IP,同时补充Socket.IO必要配置避免长轮询兼容问题:
    const socket = io('http://你的开发机局域网IP:5000', {
      transports: ['websocket'], // 强制使用websocket协议,跳过长轮询阶段
      reconnection: true // 开启自动重连
    });
    
    如果是安卓模拟器测试,也可以用系统预留的特殊地址10.0.2.2代替开发机IP,该地址会自动映射到开发机的localhost
  • 第三步:配置移动端HTTP请求权限
    由于你用的是HTTP而非HTTPS协议,需要在Expo项目的app.json中添加明文请求权限:
    {
      "expo": {
        "ios": {
          "infoPlist": {
            "NSAppTransportSecurity": {
              "NSAllowsArbitraryLoads": true,
              "NSAllowsLocalNetworking": true
            }
          }
        },
        "android": {
          "usesCleartextTraffic": true
        }
      }
    }
    
  • 第四步:确认版本匹配与网络环境
    确保项目中socket.io-client客户端版本和服务端的socket.io版本大版本号一致(例如服务端用v4.x,客户端也需要用v4.x);同时确保iOS测试设备和开发机连接的是同一个WiFi网络。
验证方法

修改完成后重启Expo服务和后端服务,重新打开移动端Expo Go应用即可正常建立Socket连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 12:15:04