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

如何解决Flutter上传图片到Node.js后端的Connection refused错误

Flutter上传图片至Node.js后端报「Connection refused (OS Error: Connection refused, errno = 111)」的排查方案

错误信息

终端错误日志

> Performing hot restart... Syncing files to device sdk gphone64 x86
> 64... Restarted application in 1,691ms. D/CompatibilityChangeReporter( 9724): Compat change id reported: 78294732; UID 10162; state: DISABLED
> D/MediaScannerConnection( 9724): Scanned
> /data/user/0/com.example.mongo_backend/cache/2fdd677e-2569-4d9c-8349-b461215be87f8625165904540994379.jpg
> to null
> 
> ======== Exception caught by image resource service ================================================ The following SocketException was thrown resolving an image codec: Connection
> refused (OS Error: Connection refused, errno = 111), address =
> localhost, port = 46640
> 
> When the exception was thrown, this was the stack: 
> #0      _NativeSocket.startConnect (dart:io-patch/socket_patch.dart:682:35)
> #1      _RawSocket.startConnect (dart:io-patch/socket_patch.dart:1817:26)
> #2      RawSocket.startConnect (dart:io-patch/socket_patch.dart:27:23)
> #3      Socket._startConnect (dart:io-patch/socket_patch.dart:2038:22)
> #4      Socket.startConnect (dart:io/socket.dart:759:21)
> #5      _ConnectionTarget.connect (dart:_http/http_impl.dart:2453:20)

应用端错误截图

Flutter应用错误截图

已完成的排查操作

  • 确认Node.js后端服务器正在运行并监听指定端口(本次为46640)
  • 验证无防火墙规则阻止连接

问题

如何排查该「Connection refused」错误,成功实现Flutter应用到Node.js后端的图片上传?


排查与解决步骤

  1. 替换localhost为宿主机IP地址
    模拟器中的localhost指向模拟器自身,而非你的电脑。Android模拟器需用10.0.2.2替代localhost;iOS模拟器若无法用localhost,则换成电脑的局域网IP。例如将请求地址从http://localhost:46640/upload改为http://10.0.2.2:46640/upload(Android)或http://你的电脑IP:46640/upload。

  2. 调整Node.js服务器监听地址
    确保后端服务器监听所有网络地址而非仅localhost,修改启动代码:

    // 错误写法:仅监听本地
    app.listen(46640, 'localhost', () => { console.log('Server running') })
    // 正确写法:监听所有外部请求
    app.listen(46640, '0.0.0.0', () => { console.log('Server running') })
    // 或省略地址参数,默认监听0.0.0.0
    app.listen(46640, () => { console.log('Server running') })
    
  3. 验证模拟器与后端的连通性
    在模拟器内置浏览器中访问http://10.0.2.2:46640(Android)或电脑IP+端口,若无法打开,说明后端配置仍有问题;若能正常访问,检查Flutter代码中的请求地址是否拼写错误。

  4. 核对请求路径与方法
    确认Flutter上传代码的接口路径、请求方法(需为POST)与后端路由完全一致,比如后端路由是/upload,Flutter中不能写成/uploads。

  5. 检查Android网络权限
    确保Flutter项目的android/app/src/main/AndroidManifest.xml中添加了网络权限:

    <uses-permission android:name="android.permission.INTERNET" />
    
  6. 关闭代理或VPN
    若当前开启了代理或VPN,暂时关闭,避免干扰模拟器与电脑之间的网络连接。


内容的提问来源于stack exchange,提问作者pomoworko.com

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:36:24