Android网络通信之Http协议

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


[size=medium][b]对于你选取选取不同方法来进行网络通信,其创建方式在设置上有些许的不同,示例代码如下:[/b][/size]
[size=large]选用GET方法。[/size]
//链接路径
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");


[size=large]选用POST方法。[/size]
  //链接路径
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");



[size=medium][b]下面给出实现手机获取服务器上一张图片(此方法可以通过手机的2G/3G网来获取服务器上你想要的图文信息,前提是:你的服务器必须是在广域网上。在这里附上一个申请免费的服务器的网站:http://eatj.com)的实例代码:[/b][/size]
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;
}


[b][size=medium]再给出给服务器发送信息的实例代码:[/size][/b]
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;
}


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

[img]http://dl2.iteye.com/upload/attachment/0089/7985/29392e35-b5c4-3906-ba80-7bd72a5cf892.bmp[/img]


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语言)