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

Flutter+Node.js登录应用Android端连接失败求助:Connection refused

Flutter Android端无法连接Node.js后端:Connection refused 解决方案

问题描述

我用Flutter+Node.js开发了带登录/注册功能的应用,Postman和Chrome浏览器中请求正常,但Android模拟器和真机无法运行,报错:

App is not working on Android [ Connection refused (OS Error: Connection refused, errno = 111) ] address = localhost, port = 51034

已知需要修改localhost相关配置,但不清楚具体操作。

核心原因

Android设备/模拟器中的localhost指向设备自身,而非你的开发电脑,因此无法访问电脑上运行的Node.js服务。


解决方案

1. Android模拟器适配

将Flutter请求中的localhost替换为模拟器专属映射地址10.0.2.2:

// signin.dart中修改请求地址
var res = await http.post(
  "http://10.0.2.2:8080/signin", // 替换原localhost地址
  headers: <String, String>{
    "Content-Type": 'application/json;charSet=UTF-8' // 注意修复原代码的Context-Type拼写错误
  },
  body: <String, String>{
    'email': user.email,
    'password': user.password,
  },
);

同时修复密码输入框的bug:

// 密码输入框的controller应绑定user.password而非user.email
TextFormField(
  controller: TextEditingController(text: user.password),
  onChanged: (value) {
    user.password = value;
  },
  // ... 其余代码不变
)

2. 真机测试适配

  1. 确保手机与开发电脑连接同一WiFi网络
  2. 获取电脑的局域网IP:
    • Windows:CMD执行ipconfig,查看IPv4地址
    • Mac/Linux:终端执行ifconfig或ip addr,查找局域网IP
  3. 将Flutter请求地址替换为电脑局域网IP,例如:
    "http://192.168.1.100:8080/signin" // 替换为你的实际IP
    
  4. 修改Node.js服务监听配置,确保允许局域网访问:
    // index.js中修改listen参数
    app.listen(port, '0.0.0.0', () => {
      console.log("port is running on " + port);
    });
    

3. 额外检查项

  • 确认电脑防火墙未拦截8080端口
  • Node.js连接MongoDB的地址无需修改,保持mongodb://localhost:27017/mydb即可(数据库与Node服务均运行在开发电脑上)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:54:22