Android与服务器端通信方式(一)之HTTP、TCP、Socket

来源:互联网 发布:mac连接电视 编辑:程序博客网 时间:2024/06/06 02:11

      Android作为客户端,与服务器的通信方式主要有两种:一种是HTTP通信,一种是Socket通信。

 

一、HTTPSocket简介

      HTTP通信:即使用HTTP协议进行通信,工作原理是客户端向服务器端发送一条HTTP请求,服务器收到之后先解析客户端的请求,之后会返回数据给客户端,然后客户端再对这些数据进行解析和处理。HTTP连接采取的是“请求—响应”方式,即在请求时建立连接通道,当客户端像服务器端发送请求时,服务器端才能向客户端发送数据。

     Socket通信:Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信。通过建立socket连接,可为通信双方的数据传输传提供通道。socket的主要特点有数据丢失率低,使用简单且易于移植。Socket类似于peer to peer的连接,一方可随时向另一方喊话。

 

二、HTTPSocketTCP的区别

      这三者在TCP/IP协议族中的关系如下图:


       HTTP是应用层的协议,更靠近用户端;TCP是传输层的协议;Socket是从传输层抽象出来的一个层,本质是接口(上下层之间是接口,同层之间是协议)。

(1)TCP连接与HTTP连接的区别

       HTTP是基于TCP的,客户端往服务器发送HTTP请求首先要建立TCP连接,也就是“三次握手”机制。


       第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认

       第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

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

(2)TCP连接与Socket连接的区别

       socket层只是在TCP/UDP传输层上做的一个抽象接口层,因此一个socket连接可以基于TCP,也有可能基于UDP。基于TCP协议的socket连接同样需要通过三次握手建立连接,是可靠的;基于UDP协议的socket连接不需要建立连接的过程,不过对方能不能收到都会发送过去,是不可靠的,大多数的即时通讯IM都是后者。

       总结:HTTPSocket都是基于TCP协议的。使用两种通信方式的情况是:

      1.使HTTP的情况:双方不需要时刻保持连接在线,比如客户端资源的获取、文件上传等。

       2.使用UDP的情况:大部分即时通讯应用(QQ、微信)、聊天室、苹果APNs等。

       github主页:https://github.com/Bettycqupt。欢迎访问!

1 0
原创粉丝点击