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();
}
<?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
它运行正常。为什么?
答案 0 :(得分:1)
很明显,这不是路由器与防火墙相关的问题,因为你在同一个网络下,所以只有几个可能性:
您应确保以某种方式打开该服务,这将有助于您调试罪魁祸首的位置。如果你已经这样做了,我建议使用一些调试工具来跟踪TCP数据包(我不知道你在目标机器上使用什么样的操作系统;如果它是一些linux发行版,tcpdump
可能有帮助。)
假设您在AndroidManifest.xml文件中拥有android.permission.INTERNET
权限。
答案 1 :(得分:0)
IMO如果您的网络服务器在80端口并且您的Android设备连接到您的WIFI,那么它应该可以工作,因为Android应该使用LAN的网络接口而不是3G网络接口。
如果正在使用3G的网络接口,则无法正常工作,因为无法解析NAT的IP地址(192.168 ...)