虽然这个问题在 StackOverflow 中被问过多次,而且我也经历过很多次,但我仍然无法解决我的问题,或者我无法找出问题的根本原因。因此,发布一个新问题。
以下是我浏览过的链接列表 --
这是我的代码--
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 Studio 进行构建。
提前致谢!
从 Android 设备连接到计算机只能在 Google Android 虚拟设备上使用 10.0.2.2。 Android 虚拟设备正在侦听 10.0.2.2 并将所有请求转发到您的计算机。
Genymotion Android 虚拟设备正在侦听 10.0.2.3 并将这些请求转发到您的计算机。
10.0.2.2 不适用于您的真实 Android 设备。如果您想在真实设备上使用它,您必须设置计算机的 IP,正如之前的答案所建议的那样。
我已经找出它不起作用的原因了。 有两个问题——
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 服务器后,它就像魅力一样工作。
为什么要选择 localhost 或任何 IP 地址在模拟器或真实设备上运行,只需使用 ngrok 以非常方便和最简单的方式将 localhost 转换为全局地址。
这个问题的接受答案确实不清楚,所以也许这会对某人有所帮助。
刚刚遇到了同样的问题,并通过执行“adb reverse tcp:8080 tcp:8080”解决了它,尽管在我撤销转发后,主机仍然可见并且所有端口都在工作,所以不清楚它是如何工作的。
确保
在我的情况下,我在我的 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://
这可能是vulkan造成的。要修复此问题,您必须在模拟器或 chrome 上关闭 vulkan。
看看这个答案。
ex- request.open("GET", "http://10.0.2.2 /app2/test.php", true);
请求.send();
前- request.open("GET", "http://10.0.2.2:8080/app2/test.php", true); 请求.send();