HTTPPOST到LAN IP错误连接被拒绝

时间:2014-02-21 20:39:43

标签: php android

public void sendJson(final JSONObject json) {
        Thread t = new Thread() {
            public void run() {
                Log.d(null,"Sync Thread Start");
                Looper.prepare(); //For Preparing Message Pool for the child Thread
                HttpClient client = new DefaultHttpClient();
                HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
                HttpResponse response;

                try {
                    HttpPost httpPost = new HttpPost("http://192.168.1.2/BusTicket/sync/sync.php");

                 // Prepare JSON to send by setting the entity
                    httpPost.setEntity(new StringEntity(json.toString(), "UTF-8"));

                    // Set up the header types needed to properly transfer JSON
                    httpPost.setHeader("Content-Type", "application/json");
                    response = client.execute(httpPost);

                    /*Checking response */
                    if(response!=null){
                        InputStream in = response.getEntity().getContent(); //Get the data in the entity
                        Log.d(null,"Sync Reponse= "+ convertStreamToString(in));
                        Log.d(null,"Sync Reponse= "+ in.toString() );
                    }

                } catch(Exception e) {
                    e.printStackTrace();
                }

                Looper.loop(); //Loop in the message queue
            }
        };
        t.start();
    }

sync.php

<?php
echo 'hi';
?>

我让我的Android设备连接到局域网,我试图访问192.168.1.2网络托管服务器,并尝试将JSON发布到php服务器,但返回以下错误

02-22 04:34:55.773: W/System.err(893): org.apache.http.conn.HttpHostConnectException: Connection to http://192.168.1.2 refused

但是,我试图使用我的Android浏览器并浏览http://192.168.1.2/BusTicket/sync/sync.php它运行正常。为什么?

2 个答案:

答案 0 :(得分:1)

很明显,这不是路由器与防火墙相关的问题,因为你在同一个网络下,所以只有几个可能性:

  • 在服务器端的那个IP上没有监听该端口
  • 服务器端有一个阻止连接尝试的本地防火墙
  • 您没有使用WIFI,因此您不在同一个网络下。

您应确保以某种方式打开该服务,这将有助于您调试罪魁祸首的位置。如果你已经这样做了,我建议使用一些调试工具来跟踪TCP数据包(我不知道你在目标机器上使用什么样的操作系统;如果它是一些linux发行版,tcpdump可能有帮助。)

假设您在AndroidManifest.xml文件中拥有android.permission.INTERNET权限。

答案 1 :(得分:0)

IMO如果您的网络服务器在80端口并且您的Android设备连接到您的WIFI,那么它应该可以工作,因为Android应该使用LAN的网络接口而不是3G网络接口。

如果正在使用3G的网络接口,则无法正常工作,因为无法解析NAT的IP地址(192.168 ...)