React Native安卓端Socket.io无法正常运行问题求助
React Native Socket.io 安卓端无法连接问题解决
核心问题
安卓模拟器的localhost指向模拟器自身,而非运行服务器的电脑,这是导致连接失败的主要原因,即使设置了usesCleartextTraffic="true"也无法解决。
具体修复步骤
1. 修正客户端连接地址
根据你使用的安卓模拟器类型,替换localhost为对应地址:
- Android Studio 模拟器:使用
10.0.2.2 - Genymotion 模拟器:使用
10.0.3.2 - 真实设备/通用局域网场景:使用电脑的局域网IP(如
192.168.1.100,可通过ipconfig/ifconfig查询)
修改后的客户端代码:
useEffect(()=> { try { // 替换为对应IP const socket = io('http://10.0.2.2:3000'); socket.on("hello", (param) => { console.log(socket.id); console.log(param); }); // 主动发送hello事件触发服务器响应 socket.emit("hello"); // 组件卸载时断开连接,避免内存泄漏 return () => socket.disconnect(); } catch (e) { console.log(e); } }, []);
2. 配置服务器监听所有网络接口
默认服务器仅监听localhost,导致安卓设备无法访问。修改服务器代码,让其监听所有网络接口:
const app = express(); const httpServer = createServer(app); const io = new Server(httpServer) io.on("connection", (socket) => { socket.on("hello",function (){ io.emit("hello", "worldd"); }) }); // 监听0.0.0.0,允许所有网络访问 httpServer.listen(3000, '0.0.0.0', () => { console.log('Server running on port 3000'); });
3. 确认安卓网络配置
确保AndroidManifest.xml的<application>标签中已正确设置明文流量允许:
<application ... android:usesCleartextTraffic="true"> <!-- 其他配置 --> </application>
额外检查项
- 确保电脑和安卓设备/模拟器处于同一局域网
- 关闭电脑防火墙,避免拦截3000端口的连接请求
- 测试服务器是否可访问:在安卓浏览器中输入
http://[你的IP]:3000,确认能正常加载(如果服务器有默认页面的话)
内容的提问来源于stack exchange,提问作者Eldan Shkolnikov
相关产品推荐
相关产品推荐

