Android模拟器SocketException连接拒绝问题求助
问题描述
本人是Laravel与Flutter新手,已成功配置Laravel后端,通过Postman测试API可成功写入数据库。但使用Android模拟器提交数据时,持续收到SocketException错误:connection refused (OS error: connection refused, errno=111),请求地址为127.0.0.1,端口不断变化。
API客户端代码
import 'package:myapp/utils/app_constants.dart'; import 'package:get/get.dart'; class ApiClient extends GetConnect implements GetxService{ late String token; final String appBaseUrl; late Map<String, String> _mainHeaders; ApiClient({required this.appBaseUrl}){ baseUrl = appBaseUrl; timeout = const Duration(seconds: 30); token = AppConstants.TOKEN; _mainHeaders ={ 'Content-type':'application/json; charset=UTF-8', 'Authorization': 'Bearer $token', }; } void updateHeader(String token){ _mainHeaders ={ 'Content-type':'application/json; charset=UTF-8', 'Authorization': 'Bearer $token', }; } Future<Response> getData(String uri,)async{ try{ Response response =await get(uri); return response; }catch(e){ return Response(statusCode: 1, statusText: e.toString()); } } Future<Response>postData(String uri, dynamic body) async { print(body.toString()); try{ Response response = await post(uri, body, headers: _mainHeaders); return response; }catch(e){ print(e.toString()); return Response (statusCode: 1, statusText: e.toString()); } } }
AppConstants.dart代码
class AppConstants{ static const String APP_NAME ="RideSharing"; static const int APP_VERSION = 1; static const String BASE_URL ="http://127.0.0.1:8000/"; //auth end points static const String REGISTRATION_URI ="api/dv/auth/register"; static const String TOKEN = "RideToken"; }
解决方案
核心原因
Android模拟器里的127.0.0.1指向模拟器自身,而非运行Laravel的主机,因此无法连接到后端服务。
具体修复步骤
修改BASE_URL地址
- 通用方案:使用主机的局域网IP地址。通过
ipconfig(Windows)或ifconfig(Linux/Mac)查询主机局域网IP(如192.168.1.100),修改AppConstants中的地址:static const String BASE_URL ="http://192.168.1.100:8000/"; - Android Studio模拟器专属方案:使用模拟器映射地址
10.0.2.2(直接对应主机localhost),修改后:static const String BASE_URL ="http://10.0.2.2:8000/";
- 通用方案:使用主机的局域网IP地址。通过
允许Laravel服务外部访问
启动Laravel时绑定到所有网络接口,不要用默认命令:php artisan serve --host=0.0.0.0配置CORS允许跨域请求
打开Laravel项目config/cors.php,调整配置:'allowed_origins' => ['*'], // 开发环境可临时设为*,生产环境指定具体域名 'allowed_methods' => ['*'], 'allowed_headers' => ['*'],修改后重启Laravel服务。
检查防火墙设置
确保主机防火墙未阻止8000端口的入站请求,开发环境可临时关闭防火墙验证。
内容的提问来源于stack exchange,提问作者David Smart
相关产品推荐
相关产品推荐

