Android网络编程

java.net.*(标准Java接口)提供与互联网有关的类。

 

Url url = "http://www.baidu.com";

HttpUrlConnection http = (HttpUrlConnection)url.openConnection();

int nRc = http.getResponseCode();  //获得链接状态

if(nRc == HttpURLConnection.HTTP_OK){

    InputStraem is = http.getInputStream();

}

 

 

Apache接口

    Android提供的Apache HttpClient,功能更加完善,为客户端的HTTP变成提供搞笑、最新、功能丰富的工具包支持。

    还提供了对它的一些封装和扩展,例如设置缺省的HTTP超时和缓存大小。

    功能主要包括创建HttpClient以及Get/Post、HttpRequest等对象,设置连接参数,执行HTTP操作,处理服务器返回结果等功能。

   

 

 1 //创建HttpClient,DefaultHttpClient表示默认属性
 2 
 3 HttpClient hc = new DefaultHttpClient();
 4 
 5 HttpGet get = new HttpGet(url);
 6 
 7 HttpResponse rp = hc.execute(get);
 8 
 9  
10 
11 if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
12 
13     InputStream is = rp.getEntity().getContent();

 

Android网络接口

    android.net.*包实际上是通过对Apache中HttpClient的封装来实现的一个HTTP编程接口。同事还提供了HTTP请求队列管理以及HTTP连接池管理,以提高并发请求情况下的处理效率,除此之外还有网络状态监视等接口、网络访问的Socket、常用的URL类以及有关Wifi相关的类等。

 

    Andrid中的Socket连接:

 1 //IP地址
 2 
 3 InetAddress inet = InetAddress.getByName("192.168.0.1");
 4 
 5  
 6 
 7 //端口
 8 
 9 Socket client = new Socket(inet,61020,true);
10 
11  
12 
13 //取得数据
14 
15 InputStream in = client.getInputStream();
16 
17 OutputStream out = client.getOutputStream();
18 
19  

 

 

Http通信

    Http(Hyper Text Transfer Protocol,超文本传输协议)用于传送WWW方式的数据。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含了请求的方法URL、协议版本,以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本、成功或者错误编码,还包括服务器信息、实体元信息以及可能的实体内容。它是一个属于应用层的面向对象的协议,由于其简介、快速,适用于分布式超媒体信息系统。

    Android提供了HttpUrlConnection和HttpClient接口来开发HTTP程序。

 

HttpURLConnection是java的标准类,继承自URLConnection类,URLConnection与HTTPURLConnection都是抽象类,无法直接实例化对象。其对象主要通过URL的openConnection方法获得:

    

Url url = new URL(“http://www.baidu.com”);

HttpURLConnection urlcon = (HttpURLConnection)url.openConnection();

 

 

openConnection方法只创建URLConnection或者HttpURLConnection实例,但是并不进行真正的连接操作。并且每次openConnection都将创建一个新的实例。

 

   

 //设置输入输出流

    connection.setDoOutput(true);

    connection.setDoInput(true);

   

    //设置传输方式:post\get

    connection.setRequestMethod("POST");

   

    //POst请求不能使用缓存

    connection.setUseCaches(false);

   

    //关闭连接

    connection.disconnect();

 

HttpURLConnection默认使用GET方式。

 

采用HttpUrlConnection的POST方式获取数据:

   

  1  //访问的URL地址
  2 
  3     String httpurl = "http://www.baidu.com/";
  4 
  5    
  6 
  7     //保存获取的数据
  8 
  9     URL url = null;
 10 
 11     try{
 12 
 13        url = new URL(httpurl);
 14 
 15     }catch{MalformedURLException e}{
 16 
 17        //错误信息
 18 
 19     }
 20 
 21    
 22 
 23     if(url != null){
 24 
 25        try{
 26 
 27            //使用HttpURLConnection打开连接
 28 
 29            HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
 30 
 31           
 32 
 33            //采用Post传递数据时输入、输出应该设置为true
 34 
 35            urlconn.setDoOutput(true);
 36 
 37            urlconn.setDoInput(true);
 38 
 39           
 40 
 41            //设置以post方式
 42 
 43            urlconn.setRequestMethod("POST");
 44 
 45           
 46 
 47            //post请求不能使用缓存
 48 
 49            urlconn.setUseCaches(false);
 50 
 51           
 52 
 53            //配置本次连接的Content-type为"application/x-www-form-urlencoded"
 54 
 55            urlconn.setRequestProperty("Content-type","application/x-www-form-urlencoded");
 56 
 57           
 58 
 59            //以上所有的配置都需要在进行connect方法之前完成
 60 
 61            urlconn.connect();
 62 
 63           
 64 
 65            //DataOutputStream流
 66 
 67            DataOutputStream out = new DataOutputStream(urlconn.getOutputStream());
 68 
 69           
 70 
 71            //设置要上传的参数
 72 
 73            String content = "par="+URLEncoder.encode("ABCD","gb2312");
 74 
 75           
 76 
 77            //将要上传的内容写入到流中
 78 
 79            out.writeBytes(content);
 80 
 81           
 82 
 83            out.flush();
 84 
 85            out.close();
 86 
 87           
 88 
 89            String inputLine = null;
 90 
 91            //获取数据
 92 
 93            BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
 94 
 95           
 96 
 97            while(((inputLine = reader.readLine())!=null)){
 98 
 99               resultData += inputLine + "\n";
100 
101            }
102 
103           
104 
105            reader.close();
106 
107           
108 
109            urlconn.disconnect();
110 
111           
112 
113        }catch(IOException e){}
114 
115     }
posted @ 2012-11-28 20:02  非著名程序师  阅读(298)  评论(0编辑  收藏  举报