【问题标题】:HTTP request to 127.0.0.1:80 fails对 127.0.0.1:80 的 HTTP 请求失败
【发布时间】:2018-07-22 16:38:31
【问题描述】:

环境

  • Android Studio 最新版本
  • 运行 Android Nougat 的 Android 模拟器
  • MAMP 用作 HTTP 服务器

问题

我的简单方法

  Future<String> _getSimpleReply( String command, callback, errorCallback ) async {

    try {

      HttpClientRequest request = await _myClient.get( '127.0.0.1', 80 '/' );
      HttpClientResponse response = await request.close();
      await callback( response.toString() );

    } on SocketException catch( e ) {

      errorCallback( e.toString() );

    }

  }

因错误而失败:

cbLoginFailed :: SocketException: OS Error: 
  Connection refused, errno = 111, address = 127.0.0.1, port = 46414

目前使用的是安卓模拟器,已配置上网:

<uses-permission android:name="android.permission.INTERNET"/>

出于测试目的,HTTP 服务器是 MAMP,它执行 index.php 脚本并返回一些简单的字符串,如果我在浏览器中输入此链接:

http://127.0.0.1/index.php

如果我将 127.0.0.1 替换为 localhost,情况不会改变

但如果我用有效的 public FQDN 更改 127.0.0.1,该方法就可以正常工作:

doLoginSuccess :: Instance of '_HttpClientResponse'

问题

  1. 为什么 android 模拟器/flutter/dart 处理 127.0.0.1 不同于 有效的 FQDN?

  2. 我该如何改变这种行为?

【问题讨论】:

  • 您知道127.0.0.1 的意思是localhost,它是手机上执行代码的设备/模拟器本身吗?另见stackoverflow.com/questions/49855754/…
  • @GünterZöchbauer 哈哈!几分钟前我错过了这一点;-)

标签: dart flutter


【解决方案1】:

正如第一条评论所指出的,localhost 或 127.0.0.1 是 - 当在 Android 模拟器上运行应用程序时 - 实际上是 Android 应用程序在其上执行的本地计算机。对于 Android 应用,本地机器是模拟的 Android 系统

因此,来自 Flutter 代码的 http 请求根本不会离开模拟器。由于 Flutter 应用不提供 HTTP Server,因此模拟器会拒绝 http 请求。

需要更改为正在执行模拟器的主机地址。

Android 模拟器使用特殊 IP 地址与其主机或主机网关进行通信。

请查看Android documentation

例如,主机的环回接口由这个IP识别:10.0.2.2 因此,如果通常使用127.0.0.1:80,可以将其替换为10.0.2.2:80

【讨论】:

  • 我仍然没有得到这个我在我的 Windows 上的端口 3000 上运行一个 npm 服务器我在我的浏览器中的 localhost:3000/api 收到一个 json 响应,所以应该将 http 请求发送到当我的客户端是 android 模拟器时,我的本地机器的地址是 10.0.2.2 或 IP 地址
【解决方案2】:

您正在尝试访问 localhost,它是您的手机/模拟器,而不是您的 PC,我假设它正在运行您的测试服务器。 您需要在您的 PC 和手机之间创建一个网络,并使用本地 IP 地址来代替

【讨论】:

  • 如果应用在安卓模拟器上运行,主机Mac的IP不就好了吗?其实也连接不上。
  • 不,不需要在模拟器和主机系统之间创建网络。这只是一个特殊的IP。
  • 是的,我说的确实是物理设备,更多关于安卓模拟器网络的信息,你可以参考developer.android.com/studio/run/emulator-networking
猜你喜欢
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 2016-09-07
  • 2014-11-19
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
相关资源
最近更新 更多