Android之网络协议篇

Android开发中要掌握的协议,一般包括Http协议和Tcp/Ip协议,如果开发蓝牙设备还要知道一些蓝牙BLE协议。还有一个就是Socket编程,也是以Tcp/Ip协议为基础的,并且和无线设备比较相关。

一.Http协议

(一)Http基础知识

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

(二)Http协议发送请求信息包括的四个内容

1.请求行

2.请求头,又叫消息头

3.空行

4.请求体(可选),又叫消息主体

(三)常用请求方式:Get请求和Post请求

1.Get请求和Post请求定义

GET - 向特定的资源发出请求。注意:GET方法不应当被用于产生"副作用"的操作中,例如在web app.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

POST - 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

2.Get请求和Post请求区别

(1)最直观的区别就是GET把参数包含在(请求行)URL中,POST通过(请求行+【请求头+请求体】)request body传递参数。

(2)POST的安全性要比GET的安全性高。

(3)GET方式提交的数据最多只能是1024字节,理论上POST没有限制

(4)Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发,POST请求也是可以进行索取数据!

3.Get请求和Post请求没有区别(这也是一个论述的观点)

HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

二.Tcp/Ip

(一)基础知识

TCP/IP字面上代表了两个协议:TCP(传输控制协议)和IP(网际协议)。但是TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。

从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层(又称数据链路层)、网络层、传输层、应用层。

也就是说Tcp/Ip协议族不仅仅是字面上的网络层和传输层,它还包含数据链路层和应用层!

TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接。

三次握手必须要会简单的描述出来!

(二)三次握手

三次握手的简单描述:

第一次握手:建立连接时,客户端发送a包到服务器,等待服务器确认;

第二次握手:服务器收到a包,同时自己也发送一个b包,即a+b包;

第三次握手:客户端收到服务器的a+b包,向服务器发送确认包,此包发送完毕,客户端和服务器进入(TCP连接成功)状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

图解:

Android之网络协议篇_第1张图片

网上详细答案:
第一次
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

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

第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
(三)TCP和UDP的区别

1.TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。

2.UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。

三.Socket编程

(一)基础知识

网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。

Socket所支持的协议种类也不光TCP/IP一种,在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。

一个Socket由一个IP地址(客户端决定)和一个端口号(服务器决定)唯一确定。

如果是蓝牙设置的Socket ,UUID相当于Socket的端口,而蓝牙地址相当于Socket的IP。

其实Socket编程程序包含一个Socket端和SocketService端。

(二)工作过程

其工作过程包含以下四个基本的步骤:

1. 创建Socket/SocketService;

2. 打开连接到Socket/SocketService的输入/出流;

3. 按照一定的协议对Socket/SocketService进行读/写操作;

4.关闭Socket/SocketService.

上面拿到Socket的输入流就可以进行数据的读取(如接收文件或文字),拿到输出流就可以进行数据的写入(如发送文件或文字)。

三.蓝牙BLE协议

这个知识我也是不知道怎么详细说,网上也没有很相关的简介。看那些电路图,我也没看懂是什么鬼!

(一)基础概念

蓝牙协议包括核心协议层、替代电缆协议层、电话控制协议层和选用蓝牙协议层。 

蓝牙的核心协议由基带,链路管理,逻辑链路控制与适应协议和服务搜索协议等4部分组成。

蓝牙BLE协议是蓝牙4.0的协议,BLE代表的是低耗能设备。

(二)蓝牙2.0、3.0、4.0区别

蓝牙2.0可以支持立体声,而蓝牙1.2版只支持单声道!

蓝牙3.0比蓝牙2.0的传输速度有了质的提升,其他功能没什么变化。

蓝牙4.0比之前的2.0和3.0有了很大的区别,主要特点有下面三个:

1.超低功耗

2.免配对密码(一般通过NFC直连)

3.可以多连(一个耳机连2个收手机)

4.超长传输距离(理论100米,蓝牙2.0、3.0理论上是10米)

(三)蓝牙相关的类

 BlueToothAdapter这个类是蓝牙设备的管理类。 
      BlueToothDevice蓝牙设备对象,里面包含蓝牙的数据。 
上面两个类蓝牙设备都会有用到,下面这两个类只有蓝牙4.0才能用到。 
      BlueToothGatt低耗能蓝牙设备的控制对象 
      BlueToothGattCharateristic低耗能蓝牙设备的特征值对象

(四)蓝牙Socket编程(蓝牙2.0、3.0都可以的)

1.UUID

在蓝牙中,每个服务和服务属性都唯一地由 全局唯一标识符 ,Universally Unique Identifier(UUID)来校验。正如它的名字所暗示的,每一个这样的标识符都要在时空上保证唯一。 UUID相当于Socket的端口,而蓝牙地址相当于Socket的IP。两个蓝牙设备进行连接时需要使用同一个UUID,这是一个服务的唯一标识,而且这个UUID的值必须是 
00001101-0000-1000-8000-00805F9B34FB 。

2.Socket编程

请看上面的描述。

蓝牙开发:http://blog.csdn.net/wenzhi20102321/article/details/53870789

蓝牙4.0开发示例:http://blog.csdn.net/wenzhi20102321/article/details/53893511

无线Wifi开发示例:http://blog.csdn.net/wenzhi20102321/article/details/53871216

Socket编程:http://blog.csdn.net/wenzhi20102321/article/details/52620323

Android网络编程:http://blog.csdn.net/wenzhi20102321/article/details/53182963
 

你可能感兴趣的:(Android基础)