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
相关产品推荐
相关产品推荐

