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

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的主机,因此无法连接到后端服务。

具体修复步骤

  1. 修改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/";
      
  2. 允许Laravel服务外部访问
    启动Laravel时绑定到所有网络接口,不要用默认命令:

    php artisan serve --host=0.0.0.0
    
  3. 配置CORS允许跨域请求
    打开Laravel项目config/cors.php,调整配置:

    'allowed_origins' => ['*'], // 开发环境可临时设为*,生产环境指定具体域名
    'allowed_methods' => ['*'],
    'allowed_headers' => ['*'],
    

    修改后重启Laravel服务。

  4. 检查防火墙设置
    确保主机防火墙未阻止8000端口的入站请求,开发环境可临时关闭防火墙验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:05:32