目前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、关闭打开流。