Android的网络通信机制,毫无置疑是用来和网络打交道的。通信方式分为两种:Http方式和Socket方式。Socket通信方式和Java中的没有什么区别,这个不是我们今天说的重点。重点的是http通信方式,我们来看看她的如山真面目吧。

   一:Http通信方式分类

   (1)HttpURLConnection方式

   (2)HttpClient方式(这一种我们明日再叙)

   二:Http的请求方法

   有两种方法:post方法和get方法。主要区别如下:

   相同点:二者均可以向服务器端传送数据,而服务器端根据请求返回相应的数据后,关闭连接;

   不同点:(1)get方法传送的数据量小,不能大于2KB,post传递的则较大,一般不受限制

                (2)post方法传递的参数值,不会显示在URL上,而get传递的则会显示在URL上

                (3)post安全性较高,get安全性较低

   三:HttpURLConnection请求方法--Get

   在操作之前,我们应该自己搭建一个服务器,并且写一个服务器端的文件,这里我写的文件功能为,根据传递的参数全不为空的情况下,输出字符串的拼接形式。具体文件如下:


<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><% String a = request.getParameter("a"); String b = request.getParameter("b"); if(a!=null&&b!=null){ out.println(a + b); }else { out.print("error"); }%>

   ◆具体步骤:

   可以在主界面上添加一个按钮,在按钮单击事件触发时产生如下操作,说白了,就是把一下的操作放到按钮的监听事件中,就OK了。

URL地址?键=值&键=值&。。。等,这里的键要和服务器中接收时的键相对应。


//服务器的地址,注意这里的参数传递方式,要直接写在URL后面。形式为:?键=值&键=值
                String urlStr = "http://222.27.166.10:8080/MyServer/youcan.jsp?a=Hello&b=word";

   (2)创建URL对象,并将上述服务器地址字符串转化成URL地址


URL url = new URL(urlStr);//将服务器地址字符串变为URL形式

   (3)创建HttpURLConnection对象,通过URL对象的openConnection打开网址,注意此时只是打开网址


HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 打开网址

   (4)通过HttpURLConnection对象的connect方法进行与服务器的链接,这时才可以与服务器打交道


conn.connect();// 链接

   (5)通过HttpURLConnection的getInputStream方法获得输入流,对服务器的返回数据进行读取操作


in = conn.getInputStream();// 获得输入流
BufferedReader br = new BufferedReader(
new InputStreamReader(in));//获得输入流的包装流
String str = null;//存储读取出的一行数据
StringBuffer sb = new StringBuffer();//字符串数据的拼接
    while ((str = br.readLine()) != null) {//做判断是不是读完了
    sb.append(str);//若没读完,则拼接
                    }
System.out.println(sb.toString());// 输出的是服务器返回的值

特别重要的一点:要在Manifest.xml文件中添加访问网络的权限,android中所有的关于网络通信的操作均需要加上权限。

<uses-permission android:name="android.permission.INTERNET" />

   ◆结果:在后台输出了字符串的拼接样式


01-07 15:55:54.622: INFO/System.out(618): Helloword

HttpURLConnection请求方法--Post

   在这里我们同样使用上述的服务器文件,返回字符串的拼接。

   ◆具体步骤:

定义一个字符串,值为服务器地址,由于这里是post方式进行请求数据,所以参数不能直接写在URL后面,注意。

//服务器地址,注意这里是post传递方式不能直接进行传参
                String urldata = "http://222.27.166.10:8080/MyServer/youcan.jsp";

   (2)创建URL对象,并将上述服务器地址字符串转化成URL地址

url = new URL(urldata);

   (3)创建HttpURLConnection对象,通过URL对象的openConnection打开网址,注意此时只是打开网址

//打开网址
conn = (HttpURLConnection) url.openConnection();

   (4)设置HttpURLConnection对象的相关属性,如下


//设置post方式不能缓存数据
conn.setUseCaches(false);
//设置传参的方式为post
conn.setRequestMethod("POST");
//设置输出流
conn.setDoOutput(true);
//设置输入流
conn.setDoInput(true);

)通过HttpURLConnection对象的connect方法进行与服务器的链接,这时才可以与服务器打交道

//开始连接
conn.connect();

通过HttpURLConnection对象的getOutputStream方法获得输出流,将传递的参数写入到其中。

//得到输出流,写参数到Server中
out  =conn.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
//传递参数的方式,通过输出流写数据的方式URLEncoder.encode的参数为“键对应的值”,"编码方式"
                    dos.writeBytes("a="+URLEncoder.encode("quanquan", "utf-8"));
DataOutputStream dos1 = new DataOutputStream(out);
//传递参数的方式,通过输出流写数据的方式URLEncoder.encode的参数为“键对应的值”,"编码方式"
                    dos1.writeBytes("b="+URLEncoder.encode("quanquan", "utf-8"));

通过HttpURLConnection对象的getInputStream方法获得输入流,对服务器的返回数据进行读取操作

//获得输入流,得到返回的数据
in = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
//进行返回数据的读取
String line = null;
StringBuffer sb = new StringBuffer();                     
                    while((line=br.readLine())!=null){
sb.append(line);
                    }
System.out.println(sb.toString());

   ◆结果:通过在控制台输出结果

01-07 15:55:54.622: INFO/System.out(618): quanquanquanquan

   

   Android通信方式还有很多,可能这些方式喜欢的人各有不同,大家就哪个用的习惯来哪个吧,这里我说的也不是很很全面,敬请谅解哈。

android spp连接 配对_java




转载于:https://blog.51cto.com/cinderella7/1289581