Android网络通信之Http协议

Android网络通信之Http协议
在通过Http协议进行Android网络编程时,首先要了解清楚Http通信中的POST和GET请求方式的不同,GET可以获得静态页面,也可以把参数放在URL字符串后面,传递给服务器。而POST方法的参数是放在Http请求中。还有一点区别就是:传输的文件较小时一般使用GET方法;传输大文件时,最好使用POST方法。
HttpURLConnection是继承于URLConnection类,二者都是抽象类。其对象主要通过URL的openConnection方法获得。创建方法如下代码所示:
//链接路径
URL url=new URL("http://192.168.1.111:8080/web/tt.txt");
//基于HTTP协议的链接对象,开通链接
HttpURLConnection connection=(HttpURLConnection)url.openConnection();


对于你选取选取不同方法来进行网络通信,其创建方式在设置上有些许的不同,示例代码如下:
选用GET方法。
//链接路径
URL url=new URL("http://192.168.1.111:8080/web/tt.txt");
//基于HTTP协议的链接对象,开通链接
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
//设置链接响应时长为5秒
connection.setConnectTimeout(5000);
//通过GET方法来进行信息交流
connection.setRequestMethod("GET");


选用POST方法。
  //链接路径
		URL url=new URL("http://192.168.1.111:8080/web/ManageServlet2");
		//基于HTTP协议的链接对象,开通链接
		HttpURLConnection connect=(HttpURLConnection) url.openConnection();
		//设置链接响应时长为5秒
		connect.setConnectTimeout(5000);
		
		/*
		 * 此部分为不可或缺的设置
		 */
		connect.setDoInput(true);//输入流采用字节流
		connect.setDoOutput(true);//输出流采用字节流
		connect.setUseCaches(false);//设置缓存
		connect.setRequestMethod("POST");//响应方式
		connect.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
		connect.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");



下面给出实现手机获取服务器上一张图片(此方法可以通过手机的2G/3G网来获取服务器上你想要的图文信息,前提是:你的服务器必须是在广域网上。在这里附上一个申请免费的服务器的网站:http://eatj.com)的实例代码:
public static byte[] getImage() throws Exception {
		//此处路径为我在网上申请的一个免费的JSP空间路径,
		URL url=new URL("http://zj954786746.s43.eatj.com/tomcat.gif");
		//建立链接
		HttpURLConnection connection=(HttpURLConnection)url.openConnection();		
        //响应时间设置为10秒
		connection.setConnectTimeout(10000);
		connection.setRequestMethod("GET");//使用GET方式连接
		byte[] data = null;
		if(connection.getResponseCode()==200){//判断响应是否正确,可加可不加
			System.out.println("#############"+connection.getResponseCode());
			InputStream in=connection.getInputStream();
			int count=0,i=-1;
			data=new byte[in.available()];
			while((i=in.read())!=-1){
				data[count]=(byte)i;
				count++;
			}
		}
		connection.disconnect();//关闭连接
		return data;
	}


再给出给服务器发送信息的实例代码:
public static String sendData(String str) throws Exception {
		//链接路径
		URL url=new URL("http://192.168.1.111:8080/web/ManageServlet2");
		//基于HTTP协议的链接对象,开通链接
		HttpURLConnection connect=(HttpURLConnection) url.openConnection();
		//设置链接响应时长为5秒
		connect.setConnectTimeout(5000);
		
		/*
		 * 此部分为不可或缺的设置
		 */
		connect.setDoInput(true);//输入流采用字节流
		connect.setDoOutput(true);//输出流采用字节流
		connect.setUseCaches(false);//设置缓存
		connect.setRequestMethod("POST");//响应方式
		connect.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
		connect.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		
		//对发送文字进行编码
		send="message="+URLEncoder.encode(str, "gb2312");
		//获取信息输出流	
		OutputStream out=connect.getOutputStream();
		//
		DataOutputStream out_data=new DataOutputStream(out);
		out_data.writeBytes(send);
		out_data.flush();//清空流管道中的信息
		out_data.close();//关闭信息流
		
		/*
		 * 接收服务器接收到我发送的信息做出的响应信息
		 * (以次判断是否成功发送)
		 */
		//获取信息输入流
		InputStream in=connect.getInputStream();
		int count=0,i=-1;
		byte[] data=new byte[in.available()];
		while((i=in.read())!=-1){
			data[count]=(byte)i;
			count++;
		}
		String	str1=new String(data);
		st=str1;
		connect.disconnect();
		return st;
	}


以上发送和接收文本文件的服务器类为一个自制的虚拟服务器,创建平台为Tomcat。下面给出此服务器类代码:

Android网络通信之Http协议


package servlet;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ManageServlet2
 */
public class ManageServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ManageServlet2() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取发送过来的信息
		String str=request.getParameter("message");
		response.getOutputStream().print("ok");//做出响应信息回复
		//文件保存路径
		File f=new File("C:\\Documents and Settings\\Administrator\\桌面\\text.txt");
		if(f.exists()){
			f.delete();
		}else{
			f.createNewFile();
		}
		OutputStream out=new FileOutputStream(f.getAbsolutePath());
		DataOutputStream out_data=new DataOutputStream(out);
		out_data.writeBytes(str);
		out.flush();
		out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);//调用doGet方法
	}

}


你可能感兴趣的:(android)