Flutter真机运行时无法向本地Node.js服务发起HTTP请求问题排查
端口号疑问解答
报错中出现的45614是TCP连接的源端口:Android系统发起HTTP请求时,会随机分配一个1024以上的空闲端口作为请求的源端口,你请求的3000是目标端口,该端口显示异常属于正常现象,无需纠结,核心问题是连接被拒绝。
连接失败解决步骤
- 确认Node服务监听地址
你的Node服务默认如果仅监听127.0.0.1:3000,仅能被本机进程访问,同局域网的其他设备(包括你的Android设备)无法访问。需要修改服务启动逻辑,监听0.0.0.0:3000,以Express为例:
修改后重启Node服务。app.listen(3000, '0.0.0.0', () => { console.log('服务运行在0.0.0.0:3000') }) - 确认网络环境与防火墙配置
确保你的Android设备和电脑连接的是同一个WiFi,网络没有开启AP隔离限制。可以先在Android设备自带的浏览器中直接访问http://192.168.43.105:3000,如果无法打开,先检查电脑的防火墙配置:Windows系统需要新增3000端口的TCP入站允许规则,Mac系统需要在安全设置中放行Node程序的网络连接。 - 补全Flutter请求地址的协议头
你配置的192.168.43.105:3000缺少HTTP协议前缀,会导致请求库识别失败,需要修改为:static String dbUrl = 'http://192.168.43.105:3000'; - adb端口转发的正确用法(USB连接场景推荐)
你之前使用的adb tcpip 3000是开启adb无线调试的命令,和业务端口转发无关。USB连接下最简单的方案是使用反向端口转发,不需要调整局域网和IP配置,执行命令:adb reverse tcp:3000 tcp:3000
该命令会把Android设备本地3000端口的请求,直接转发到电脑本地的3000端口,使用该方案时Flutter的请求地址直接写http://localhost:3000即可。
你查询到的adb forward --list中的两个端口是正向转发规则:前者是Android设备上的监听端口,后者是转发到电脑的端口,当前现有规则和你的需求无关,可以执行adb forward --remove-all清空冗余规则。
内容的提问来源于stack exchange,提问作者Vincenzo
相关产品推荐
相关产品推荐

