Flutter请求报错Connection refused(errno=111,端口51158)如何解决?
Flutter本地接口调用Connection refused (errno 111) 解决方案
排查步骤
- 步骤1:确认运行场景,修正请求地址
报错中的localhost指向的是当前运行应用的设备本身的环回地址,而非你运行后端服务的电脑,不同场景的替换规则如下:- Android模拟器:将请求地址中的
localhost替换为官方预设的电脑映射地址10.0.2.2,例如http://10.0.2.2:你的后端端口/接口路径 - iOS模拟器:可直接使用电脑
localhost,如果仍报错替换为电脑的局域网IPv4地址 - 真机调试(Android/iOS通用):确保手机和电脑连接同一WiFi,将
localhost替换为电脑的局域网IPv4地址
电脑局域网IP查询方式:Windows执行
ipconfig,macOS/Linux执行ifconfig/ip addr,取WLAN/以太网对应的IPv4地址即可 - Android模拟器:将请求地址中的
- 步骤2:检查后端服务绑定配置
确保后端服务没有仅绑定本地环回地址127.0.0.1,需要绑定0.0.0.0才能允许局域网内其他设备访问,不同框架配置示例:- Node.js Express:
app.listen(3000, '0.0.0.0') - SpringBoot:配置文件添加
server.address=0.0.0.0
- Node.js Express:
- 步骤3:检查应用网络权限与明文请求限制
- Android端:在
android/app/src/main/AndroidManifest.xml中添加网络权限:
Android 9及以上系统默认禁止明文HTTP请求,如需使用HTTP可在<uses-permission android:name="android.permission.INTERNET" />application标签中添加配置:<application ... android:usesCleartextTraffic="true" ...> - iOS端:在
ios/Runner/Info.plist中添加ATS配置,允许HTTP请求:<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
- Android端:在
- 步骤4:快速验证
直接在运行应用的模拟器/真机自带浏览器中输入你使用的请求地址,若无法正常返回数据,说明是地址/网络配置问题,与Flutter代码无关。
内容的提问来源于stack exchange,提问作者Sara Alfatih
相关产品推荐
相关产品推荐

