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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:10:24