1. 程式人生 > >Android與伺服器端通訊方式(一)之HTTP、TCP、Socket

Android與伺服器端通訊方式(一)之HTTP、TCP、Socket

      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。歡迎訪問!