从 Android 模拟器连接到 LocalHost/10.0.2.2 超时

Posted

技术标签:

【中文标题】从 Android 模拟器连接到 LocalHost/10.0.2.2 超时【英文标题】:Connection to LocalHost/10.0.2.2 from Android Emulator timed out 【发布时间】:2016-05-28 06:12:41 【问题描述】:

虽然这个问题在 *** 中已经被问过多次,并且我也经历了很多次,但我仍然无法解决我的问题,或者我无法找出问题的根本原因。因此,发布一个新问题。

以下是我浏览的链接列表--

    How to connect to my http://localhost web server from android Emulator in Eclipse

    Accessing localhost:port from Android emulator

    How can I access my localhost from my Android device?

    how to connect localhost in android emulator?

这是我的代码 --

protected Void doInBackground(Void... params)
    
        try
        
            HttpURLConnection connection = null;

            URL url = new URL("http://10.0.2.2:8080/android_connect/user_registration.php");
            connection = (HttpURLConnection)url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setRequestMethod("POST");
            connection.setUseCaches(false);
            connection.setConnectTimeout(720000000);
            connection.setReadTimeout(72000000);
            connection.connect();

            OutputStreamWriter output = new OutputStreamWriter(connection.getOutputStream());
            output.write(emp_details.toString());
            output.flush();
            output.close();

            HttpResult = connection.getResponseCode();

            connection.disconnect();
        
        catch(Exception e)
        
            e.printStackTrace();
        
        return null;
    

我正在尝试通过 WAMP 服务器使用 PHP 将 Android 与 mysql 数据库连接起来。 PHP 文件 (user_registration.php) 保存在以下路径中 --

C:\wamp\www\android_connect

现在执行代码后,我收到类似“java.net.SocketTimeoutException: failed to connect to /10.0.2.2 (port 8080) after 720000000ms: isConnected failed: ETIMEDOUT (Connection timed out)”。

我浏览了特定链接以解决此问题 --

Android connection to localhost

但无法理解它是如何解决的! :)

在这种情况下你能帮帮我吗?请注意,我正在使用 Android Studio 进行构建。

提前致谢!

【问题讨论】:

【参考方案1】:

我已经找到了它不起作用的原因。 有两个问题——

    IP 地址不正确。因此,我将 IP 地址从 10.0.2.2 更改为 IPv4 地址 - 可以在 Windows 上通过在命令提示符下键入 ipconfig 来获取,并在 linux 中查看 link。

    另外,端口号 8080 也不正确。我在httpd.conf 文件中设置了自己的端口号,比如 ##Listen 12.34.56.78:8383Listen 0.0.0.0:8383Listen [::0]:8383##,在Apache下和我用的一样。

更改两者并重新启动 WAMP 服务器后,它就像一个魅力。

【讨论】:

您能解释一下“所以我将 IP 地址从 10.0.2.2 更改为 IPv4 地址”吗?谢谢 我在代码中使用 10.0.2.2 作为我的 IP 地址,这是不正确的。因此,我将其更改为 IPv4 地址。然后它开始工作了。 什么是 IPv4 地址? @domji84 -- 转到Command Prompt,然后输入ipconfig,它将列出IP 地址。在那里你可以找到IPv4 地址。【参考方案2】:

从您的 Android 连接到您的计算机只能在 Google Android 虚拟设备上使用 10.0.2.2。 Android 虚拟设备正在侦听 10.0.2.2 并将所有请求转发到您的计算机。

Genymotion Android 虚拟设备正在侦听 10.0.2.3 并将这些请求转发到您的计算机。

10.0.2.2 不适用于您的真实 Android 设备。如果你想在你的真实设备上使用它,你必须设置你的计算机的 IP,正如之前的答案所建议的那样。

【讨论】:

最新版本的 Genymotion 是 10.0.3.2,请参阅 ***.com/a/18940022/2139664【参考方案3】:

为什么要在模拟器或真实设备上运行 localhost 或任何 ip 地址只需使用 ngrok 以非常方便和最简单的方式将 localhost 转换为全局地址。

【讨论】:

【参考方案4】:

在我的情况下,我在我的 android 设备上运行了这段代码:

private static final String BACKEND_URL = "http://10.0.2.2:4242/"; // 10.0.2.2 is the Android emulator's alias to localhost

但我的服务器代码正在我的 PC 上运行。因此,由于我的 PC 和我的 android 设备是“不同的设备”,这就是“http://10.0.2.2:4242/”不起作用的原因。解决方案是将“http://10.0.2.2:4242/”更改为“https://:4242/”

【讨论】:

【参考方案5】:

这个问题的公认答案确实不清楚,所以也许这会对某人有所帮助。 刚刚遇到同样的问题并通过执行“adb reverse tcp:8080 tcp:8080”解决了它,虽然在我撤销转发之后,主机仍然可见并且所有端口都在工作,所以不清楚它是如何工作的。 确保

您在 wifi 设置中没有代理 如果有,则添加 10.0.2.2 以绕过无掩码 您没有打错字,有时人们会像这样 10.0.0.2:8080 输入 0 而不是 2

【讨论】:

问题已通过禁用代理解决。 ..顺便说一句,我找不到在哪里添加IP地址10.0.2.2来绕过它。请分享在设置中添加的位置。

以上是关于从 Android 模拟器连接到 LocalHost/10.0.2.2 超时的主要内容,如果未能解决你的问题,请参考以下文章

Android模拟器未连接到localhost api

如何从android设备连接到sql server数据库

从 Flutter 应用通过本地网络连接到 Firebase 函数模拟器

可以使用颤振在 VS Code 和 Android Studio 中启动但无法连接到模拟器

“无法连接到远程 VM”将 jdb 连接到 Windows 上的 android 模拟器

从 Flutter 应用程序连接到本地 Firebase 函数模拟器时出错