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

问题描述 投票:0回答:7

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

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

  1. 如何从 Eclipse 中的 Android 模拟器连接到我的 http://localhost Web 服务器

  2. 从 Android 模拟器访问 localhost:port

  3. 如何从 Android 设备访问我的本地主机?

  4. 如何在android模拟器中连接localhost?

这是我的代码--

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 连接到本地主机

但不明白它是如何解决的! :)

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

提前致谢!

java php android post localhost
7个回答
11
投票

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

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

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


10
投票

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

  1. IP 地址不正确。因此,我将 IP 地址从

    10.0.2.2
    更改为
    IPv4
    地址 - 在 Windows 上可以通过在命令提示符中键入
    ipconfig
    来获取该地址,并在 Linux 上查看 link

  2. 端口号8080也不正确。我在

    httpd.conf
    文件中设置了自己的端口号,例如
    ##Listen 12.34.56.78:8383Listen 0.0.0.0:8383Listen [::0]:8383##
    ,在Apache下和我用的是一样的。

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


1
投票

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


1
投票

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

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

0
投票

在我的情况下,我在我的 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

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


0
投票

这可能是vulkan造成的。要修复此问题,您必须在模拟器或 chrome 上关闭 vulkan。

看看这个答案。

https://stackoverflow.com/a/70842795/4825796


0
投票
  • ***** 端口:8081 - 10.0.2.2

ex- request.open("GET", "http://10.0.2.2 /app2/test.php", true);
请求.send();

  • *****端口:8080 - 10.0.2.2:8080

前- request.open("GET", "http://10.0.2.2:8080/app2/test.php", true); 请求.send();

© www.soinside.com 2019 - 2024. All rights reserved.