通过android连接localhost - 连接到10.0.2.2被拒绝

时间:2013-11-16 07:14:37

标签: android eclipse apache

我的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)。

CLASS FILE:

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 Manifest:

<?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" />

错误LogCat:

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 

5 个答案:

答案 0 :(得分:2)

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

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

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

Allow from all

然后重新启动Appache服务器,并告诉我feadback。

修改

在您的真实设备中试用:

转到CMD并在IPv4下键入ipconfig获取IP地址并更改它看起来类似于此的IP:

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

关闭计算机中的防火墙和任何防病毒应用程序

请给我反馈意见。

答案 1 :(得分: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正在侦听servername localhost和端口8080(允许来自httpd.conf中的所有人)。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果您的SDK版本低于9,那么为SDK版本添加上面的代码,他们在Apache更新httpd.conf中的一些更改作为来自所有的行拒绝。替换句子允许来自所有并重新启动WAMP服务器的服务然后使用{{ 1}}地址或10.0.2.2端口号并在Android AndroidManifest文件中包含权限行

10.0.2.2:8080

答案 4 :(得分:0)

我通过在网址<:p>中编写cmd -> ipconfig的IP地址来解决此问题

 HttpPost httppost = new HttpPost( "http://192.168.x.x/mylibman/data.php" );