Android网络编程总结

1.网络的基本概念

1.1 IP地址和端口号

●IP地址:网络中的每台计算机都必须有一-个唯- -的I P地址作为标识,用一-组由"."分隔的十进制数组成
●端口号: IP地址只能保证将数据送到指定的计算机,但无法知道交给该主机的哪个网络程序,因此采用端口号标识计算机上正在运行的进程
●每个被发送的网络数据包都包含端口号,用于将该数据帧交给具有相同端口号的应用程序处理

1.2Java的网络编程由java . net包中的类进行处理

●InetAddress类:描述IP地址

1.3网络分层

1.3.1 OSI七层协议

OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。

1.3.2 TCP/IP五层模型

● TCP/IP五层模型:应用层(Application)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。

1.3.3三次握手,四次挥手

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”

第一次挥手:客户端发送报文告诉服务器没有数据要发送了

第二次挥手:服务端收到,再发送给客户端告诉它我收到了

第三次挥手:服务端向客户端发送报文,请求关闭连接

第四次挥手:客户端收到关闭连接的请求,向服务端发送报文,服务端关闭连接

1.3.4TCP为什么三次握手

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认

2.Http协议

http协议是一个基于请求与响应模式的无连接,无状态,应用层的协议,支持c/s模式,简单快速,灵活
简单快速:协议简单,通信速度快
灵活:允许传输任意类型的数据对象,由Content-Type标记
无连接:每次处理一个请求,处理完成后既断开
无状态:对事务处理没有记忆能力
http有两种报文:请求报文和响应报文
请求报文由请求行,请求报头,和请求数据组成
请求行:抓包第一行,包括请求方法,url和http版本
请求报头:指的就是题目中“里面的协议头部”
请求数据:指post方式提交的表单数据
响应报文由状态行,响应报头,响应正文组成
状态行:状态码
响应报头:同请求报头
响应正文:服务器返回的资源数据
接下来是http头部,既请求报头和响应报头,统称消息报头,消息报头可以分为通用报头,请求报头,响应报头,实体报头等
通用报头和实体报头既可以出现在请求报头中,也可以出现在响应报头中,通用报头包含的字段如:Date Connection Cache-Control,实体报头中有Content-Type Content-Length Content-Language Content-Encoding.

请求报头中包含的字段有:
Host,User-Agent,Accept-Encoding,Accept-Language,Connection

响应报头包含的字段:
Location,Server

3.Android的网络访问

3.1 Android URL通信

1.创建URL以及HttpURLConnection对象
2.连接参数设置
3.连接到服务器
4.向服务器写数据
5.从服务器读取数据

●HttpURLConnection是Java API的标准接口,包含在Java. net包中,继承自HttpURLConnection类
●URLConnection与Ht tpURLConnect ion都是抽象类,无法直接实例化,通过URL的openConnection方法获得对象
URL url = new URL( “https://www. baidu. com”);
HttpURLConnection connection= (Ht tpURLConnection) url. openConnection( );
●Ht tpURLConnection获取输入、输出流的方法
●InputStream getInputStream( ):获得输入流,调用此方法后才真正发生连接
●OutputStream get0utputStream( ):获得输出流

3.2HttpURLConnection访问HTTP资源的步骤:

①根据URL地址创建URL对象
②使用URL对象的openConnection( )方法获取HttpURLConnection对象
③设置连接的属性,包括GET/POST请求方式
④输入、输出数据
⑤关闭输入、输出流
⑥在AndroidMani fes t配置文件中设置访问INTERNET的权限

3.3 get方法

在这里插入图片描述

3.4 post方法

在这里插入图片描述

3.5 get和post的区别

http是应用层的协议,底层基于TCP/IP协议,所以本质上,get和post请求都是TCP请求。所以二者的区别都是体现在应用层上(HTTP的规定和浏览器/服务器的限制)

1.参数的传输方式:GET参数通过URL传递,POST放在Request body中。

2.GET请求在URL中传送的参数是有长度限制的,而POST没有。

3.对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。不过要注意,并不是所有浏览器都会在POST中发送两次包,比如火狐

4.对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

5.GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

6.GET请求只能进行url编码,而POST支持多种编码方式。

7.GET在浏览器回退时是无害的,而POST会再次提交请求。

8.GET产生的URL地址可以被Bookmark,而POST不可以。

9.GET请求会被浏览器主动cache,而POST不会,除非手动设置。

4Android的网络框架

4.1 Volley

Google官方推出的一套小而巧的异步请求库, 支持HttpClient (Android 6. o之后不再
持)、HttpURLConnection

4.2 okHttp

高性能的http库,支持同步、异步,而且支持http2、websocket协议, api简洁易用,实现
了http缓存
Androi d网络访问的源码已用0kHttp代替了HttpURLConnection

4.3 Retrofit

基于OkHttp封装的一套RESTful网络请求框架,底层默认采用0kHttp。目前网络框架的最好选择: RxJava + Retrofit + okHttp

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值