通过 android 连接本地主机 - 连接到 10.0.2.2 被拒绝

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

我的 PC 上安装了一台 apache 服务器,其中托管一个 PHP 文件。

然后我尝试使用 eclipse 连接到该文件,但它总是给我以下错误

connection to http://10.0.2.2:8080 refused.

我尝试将地址更改为以下地址,但一直遇到类似的错误。

http://10.0.2.2
http://127.0.0.1
http://localhost

任何人都可以帮助我吗?

编辑:仅供参考,我可以毫无问题地访问远程服务器(例如 www.mydomain.com)。

班级档案:

HttpClient httpclient = new DefaultHttpClient();
Log.d("test","t0");
HttpPost httppost = new HttpPost("http://10.0.2.2:8080/mylibman/data.php");
Log.d("test","t1");
HttpResponse response = httpclient.execute(httppost); // error here
Log.d("test","t2");

Android 清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.migrationdesk.mylibman"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="18" />
    <uses-permission android:name="android.permission.INTERNET" />

错误日志目录:

11-16 02:02:20.803: E/log_tag(1427): Error in http connection org.apache.http.conn.HttpHostConnectException: Connection to http://10.0.2.2:8080 refused
11-16 02:02:20.803: E/log_tag(1427): Error converting result java.lang.NullPointerException: lock == null
11-16 02:02:20.803: E/log_tag(1427): Error parsing data org.json.JSONException: End of input at character 0 of 
android eclipse apache
5个回答
2
投票

好吧,转到 Apache httpd.conf(位于 Apache 文件夹中):并搜索

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

检查第二行是否为Deny,如果是则将其更改为:

Allow from all

然后重新启动Apache服务器,并告诉我反馈。

编辑

在您的真实设备中尝试一下:

转到 CMD 并在 IPv4 下输入

ipconfig
,获取 IP 地址并更改 IP,它将类似于以下内容:

http://192.168.0.106:8080/mylibman/data.php // similar to this.

关闭 PC 中的防火墙和所有防病毒应用程序

请给我反馈。


1
投票

Mike在这个问题上给了我很多帮助。所以这里是我避免这种情况的步骤连接被拒绝

1) 添加if来测试Android SDK。似乎在新版本中,您必须明确允许在不同线程中打开连接:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
            System.out.println("*** My thread is now configured to allow connection");
        }

...

2) 为您的端口添加例外:

在您的情况下允许端口入站连接

8080

3)通过本地浏览所需的网址来测试您的连接

使用浏览器并尝试在本地访问

http://10.0.2.2:8080

4)在清单文件中添加互联网权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yourapp"
    android:versionCode="1"
    android:versionName="1.1" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.INTERNET"/>

我正在使用 Wamp,它的 apache 正在监听服务器名 localhost 和端口 8080(允许来自 httpd.conf 中的所有端口)。

我的本地 IP 类似于 192.168.0.XXX/folder/my-page-here


1
投票

您可以使用您的真实IP地址访问您的虚拟服务器。看看我的回答这里。我希望它有帮助。


0
投票

如果您的 SDK 版本低于 9,则为 SDK 版本添加上面的代码,在 Apache 中进行一些更改,将 httpd.conf 更新为行拒绝所有..替换该句子允许所有并重新启动 WAMP 服务器的服务,然后使用

10.0.2.2
地址或
10.0.2.2:8080
端口号并在 Android AndroidManifest 文件中包含权限行

<uses-permission 
android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
</uses-permission>

0
投票

我通过在 url 中写入

cmd -> ipconfig
中的 IP 地址来解决此问题:

 HttpPost httppost = new HttpPost( "http://192.168.x.x/mylibman/data.php" );
© www.soinside.com 2019 - 2024. All rights reserved.