Android网络编程 HttpClient Socket



目前Android平台有3中网络通信接口:

1、java.net.*(标准的java接口):URLConnection/HttpURLConnection类。

2、org.apache(Apache接口):HttpClient接口

3、Android.net(Android网络接口):通过对Apache的HttpClient接口的封装来实现的一个Http编程接口。

一、标准的java接口:

 通过Http请求一般有两种方式:get与post

 get方式:get请求可以获取静态页面,也可以把参数放到URL字符串之后,传递到服务器。

 post与get的不同之处在于,post是项参数放在http请求数据中的。

 标准java接口下的网络通信需要借助于HttpURLConnection抽象类,该类继承自URLConnection抽象类。

 由于HttpURLConnection和URLConnection都是抽象类,无法实例化,其对象通过openConnection方法获得。

 创建一个HttpURLConnection连接的代码如下:

 URL url = new URL("http://www.google.com");
 
 HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();

 openConnection方法只创建URLConnection或HttpURLConnection实例,但并不进行真正的连接操作,

 并且每次openConnection之后都会创建一个新的实例。

 如下是一些属性设置:

 connection.setDoOutput(true) //设置输入输出流

 connection.setDoInput(true);

 设置请求方式

 connection.setRequestMethod("POST");
 connection.setUseCaches(false)//设置post请求不能使用缓存

 connection.disconnection();//释放连接。

二、Apache接口:HttpClient接口

 HttpClient接口是对java.net接口做了一层封装,更适合Android开发联网应用。

 获取HttpClient的方式:

 HttpClient client = new DefaultHttpClient(); //DefaultHttpClient是默认的http客户端。通它可以创建一个HTTP连接。

 HttpResponse是一个Http连接响应,当执行一个HTTP请求后就会返回一个HttpResponse,可以通过他来获得一些响应信息。

 HttpResponse httpResponse = client.execute(httpRequest);

 执行HttpClient时需要传入请求方式:get、post

 get:HttpGet httpRequest = new HttpGet(url);

 psot:HttpPost httpRequest = new HttpPost(url);

 post方式需要将请求参数保存到NameValuePair中。
 
 if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ //成功 }

 
Socket通信:

 Socket有两种主要的操作方式:面向连接的和无连接的。

 面向连接的操作方式(使用TCP协议):就象一部电台,必须建立一个连接和一个呼叫

 优点:安全可靠。

 确定:传输效率低。

 无连接的操作方式(UDP协议):就像邮件投递,没有保证。

 优点:传输效率高。

 确定:可靠性差。

 Socket编程原理:

 通过使用java.net包中提供的两个类:Socket和ServerSocket:分别用来表示双向连接的客户端和服务器。

 客户端: Socket:Socket socket= newSocket(IP,port);//参数为服务器的IP和端口号。

 使用Socket创建客户端的步骤如下:

 1、通过IP地址和端口实例化Socket,请求连接服务器。

 2、获取Socket上的流以进行读写。

 3、把流包装进BufferReader/PrintWriter的实例

 4、对Socket进行读写

 5、关闭打开的流。

 服务器: ServerSocket server = new ServerSocket(port);//服务器的端口。

 使用ServerSocket创建服务器步骤如下:

 1、指定端口实例化一个ServerSocket

 2、调用ServerSocket的accept()方法以在等待期间造成阻塞。

 3、获取位于该底层Socket的流已进行读写操作

 4、将数据封装成流

 5、对Socket进行读写

 6、关闭打开流。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。