从Flutter应用向本地主机发出请求时获取带有随机端口的错误消息

时间:2019-03-13 18:34:18

标签: dart flutter

**更新** 通过编辑服务器以在0.0.0.0上侦听来修复此问题 现在得到响应,但是错误消息仍然不正确,它应该显示端口3333不是随机端口。 --- // ---

尝试向http://192.168.1.1:3333发出发布请求时,出现此错误:

  

SocketException(SocketException:操作系统错误:连接超时,   errno = 110,地址= 192.168.2.9,端口= 53744)

每个请求的端口都会更改,但永远不是正确的端口(3333),为什么?这是我的代码

class Api {
  static const req_url = 'http://192.168.1.1:3333/api/auth/login';

  Future<Auth> fetchAuthToken() async {

    Map data = {
      'email': 'test@gmail.com',
      'password': '123456'
    };

    //encode Map to JSON
    var body = json.encode(data);

    var response = await http.post(req_url,
        headers: {"Content-Type": "application/json"},
        body: body
    );
    if (response.statusCode == 200) {
      // If the call to the server was successful, parse the JSON
      return Auth.fromJson(json.decode(response.body));
    } else {
      // If that call was not successful, throw an error.
      throw Exception('Failed to load post');
    }
  }
}

我已经尝试将IP更改为here,如所述{{3}},但我没有使用仿真器,因此不确定是否重要。

2 个答案:

答案 0 :(得分:0)

在运行express.js服务器的Flutter应用程序中我遇到了同样的问题,但是通过让Expresss服务器在0.0.0.0端口3333上侦听来解决了这个问题,在Flutter应用程序中,我将发布网址更改为Mac IP具有相同端口3333 http://192.168.43.210:3333/api/v02的网络,并且模拟器运行正常

void _mypost() {
    
    Map<String,String> data = {
              'token':'2jmj7l5rSw0yVb/vlWAYkK/YBwk=',
              'phone':'+256750002991',
           };
    Map<String,String> headers ={
            'Content-Type': 'application/x-www-form-urlencoded'
    };
    var client = httpClient.Client();
    client.post("http://192.168.43.210:3333/api/v02", headers:headers, body:data)
    .then((response) => print(" Response Body ${response.body}"))
    .catchError((error) => print(" Response Body : ${error}"));
}

答案 1 :(得分:0)

我在Android模拟器上进行了所有尝试,但始终出现相同的问题。

甚至尝试过adb reverse tcp:port tcp:port

然后我使用了一个名为 ngrok 的应用程序,该应用程序重定向到您的 localhost:port 。仍然,我得到同样的错误。

然后,我禁用 Windows防火墙和尤里卡!!!

希望这对某人有帮助。