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连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
图解:
网上详细答案:
第一次
第一次握手:建立连接时,客户端发送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