gpt4 book ai didi

dart - HTTP 请求到 127.0.0.1 :80 fails

转载 作者:IT王子 更新时间:2023-10-29 06:41:31 27 4
gpt4 key购买 nike

环境

  • 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 替换为本地主机,情况不会改变

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

doLoginSuccess :: Instance of '_HttpClientResponse'

问题

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

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

最佳答案

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

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

需要更改为运行模拟器的主机地址。

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

Habe 在 Android documentation 中查看.

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

关于dart - HTTP 请求到 127.0.0.1 :80 fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51467174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com