从Android Emulator连接到LocalHost / 10.0.2.2超时

时间:2016-02-16 19:31:49

标签: java php android post localhost

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

以下是我经历过的链接列表 -

  1. How to connect to my http://localhost web server from Android Emulator in Eclipse

  2. Accessing localhost:port from Android emulator

  3. How can I access my localhost from my Android device?

  4. how to connect localhost in android emulator?

  5. 这是我的代码 -

    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;
        }
    

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

    C:\wamp\www\android_connect
    

    现在执行代码后,我收到类似“ java.net.SocketTimeoutException:720000000ms之后无法连接到/10.0.2.2(端口8080)的错误:isConnected失败:ETIMEDOUT(连接超时)< /强>”。

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

    Android connection to localhost

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

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

    提前致谢!

5 个答案:

答案 0 :(得分:6)

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

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

10.0.2.2无法使用真正的Android设备。如果您想在真实设备上使用它,您必须设置计算机的IP,因为之前的答案已经建议了。

答案 1 :(得分:5)

我已经找到了它无法正常工作的原因。 有两个问题 -

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

  2. 端口号8080也不正确。我在httpd.conf文件中设置了自己的端口号,就像 ##Listen 12.34.56.78:8383Listen 0.0.0.0:8383Listen [::0]:8383##,在Apache下,我使用了相同的。

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

答案 2 :(得分:0)

为什么要使用本地主机或在仿真器或真实设备上运行的任何IP地址,只需简单ngrok即可将本地主机转换为全局地址。

答案 3 :(得分: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

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

答案 4 :(得分:0)

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

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