Android的网络编程

本文详细介绍了Android中两种主要的网络编程方式:基于HTTP协议和基于Socket的网络通信。对于HTTP协议,文章讲解了其简介、主要特点、请求方法以及执行过程,包括GET、POST请求的示例。而对于基于Socket的通信,文章提到了服务器端和客户端的实现,强调了Socket交互通过字节流完成,并使用DataInputStream和DataOutputStream进行数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android的网络编程的分类

1.基于http协议的

2.基于socket

基于TCP/IP协议之上的协议

一、HTTP协议

1.HTTP简介

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。

2.HTTP协议的主要特点

1.支持C/S(客户/服务器)模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST,每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议,无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

3.HTTP的请求方法

HTTP请求方法有8种,分别是GET、POST、DELETE、PUT、HEAD、TRACE、CONNECT 、OPTIONS。其中PUT、DELETE、POST、GET分别对应着增删改查,对于移动开发最常用的就是POST和GET了。
1.GET:请求获取Request-URI所标识的资源
private void get(String url){
//构造Request
Request request = new Request.Builder().url(url)
.header(“User-Agent”, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 " +
“(KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36”)
.addHeader(“Accept”,“application/json”)
.get()
.method(“GET”,null)
.build();
2.POST:在Request-URI所标识的资源后附加新的数据
private void post(String url,Map<String,String> params){
RequestBody body = setRequestBody(params);
//构造Request
Request request = new Request.Builder().url(url).post(body)
.header(“User-Agent”, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 " +
“(KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36”)
.addHeader(“Accept”,“application/json”)
.build();
3.HEAD:请求获取由Request-URI所标识的资源的响应消息报头
4.PUT: 请求服务器存储一个资源,并用Request-URI作为其标识
5.DELETE :请求服务器删除Request-URI所标识的资源
6.TRACE : 请求服务器回送收到的请求信息,主要用于测试或诊断
7.CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
8.OPTIONS :请求查询服务器的性能,或者查询与资源相关的选项和需求

4.HTTP的执行

1.创建一个URL对象

比如:URL url = new URL(http://www.taobao.com);

2.利用HttpURLConnection对象从网络中获取网页数据

比如:HttpURLConnection conn = (HttpURLConnection) url.openConnection();

3.设置连接超时

比如:conn.setConnectTimeout(9*1000);

4.对响应码进行判断

比如:if (conn.getResponseCode() != 200) //从Internet获取网页,发送请求,将网页以流的形式读回来

throw new RuntimeException(“请求url失败”);

5.得到网络返回的输入流

InputStream is = conn.getInputStream();
String result = readData(is, “GBK”); //文件流输入出文件用outStream.write
conn.disconnect()

总结:

记得设置连接超时,如果网络不好,Android系统在超过默认时间会收回资源中断操作。
返回的响应码200,是成功。
在Android中对文件流的操作和JAVA SE上面是一样的。
在对大文件的操作时,要将文件写到SDCard上面,不要直接写到手机内存上。
操作大文件是,要一遍从网络上读,一遍要往SDCard上面写,减少手机内存的使用.这点很重要,面试经常会被问到。
对文件流操作完,要记得及时关闭。

二、基于socket的用法

服务器端:
先启动一个服务器端的socket : ServerSocket svr = new ServerSocket(8989);
开始侦听请求:Socket s = svr.accept();
取得输入和输出:DataInputStream dis = new DataInputStream(s.getInputStream());
        DataOutputStream dos = new DataOutputStream(s.getOutputStream());
Socket 的交互通过流来完成,即是说传送的字节流,因此任何文件都可以在上面传送。谁打开的记得要关上。
DataInputStream/DataOutputStream来进行包装是因为我们想要他们对基本数据类型的读写功能readInt(),writeInt(),readUTF(),**writeUTF()**等等。 
   
客户端:   
发起一个socket连接:Socket s = new Socket(“192.168.1.200”,8989);
取得输入和输出:DataInputStream dis = new DataInputStream(s.getInputStream());
        DataOutputStream dos = new DataOutputStream(s.getOutputStream());
之后就可以相互通信了。谁打开的记得要关上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值