Android與伺服器端通訊方式(一)之HTTP、TCP、Socket
Android作為客戶端,與伺服器的通訊方式主要有兩種:一種是HTTP通訊,一種是Socket通訊。
一、HTTP、Socket簡介
HTTP通訊:即使用HTTP協議進行通訊,工作原理是客戶端向伺服器端傳送一條HTTP請求,伺服器收到之後先解析客戶端的請求,之後會返回資料給客戶端,然後客戶端再對這些資料進行解析和處理。HTTP連線採取的是“請求—響應”方式,即在請求時建立連線通道,當客戶端像伺服器端傳送請求時,伺服器端才能向客戶端傳送資料。
Socket通訊:Socket又稱套接字,在程式內部提供了與外界通訊的埠,即埠通訊。通過建立socket連線,可為通訊雙方的資料傳輸傳提供通道。
二、HTTP、Socket、TCP的區別
這三者在TCP/IP協議族中的關係如下圖:
HTTP是應用層的協議,更靠近使用者端;TCP是傳輸層的協議;Socket是從傳輸層抽象出來的一個層,本質是介面(上下層之間是介面,同層之間是協議)。
(1)TCP連線與HTTP連線的區別
HTTP是基於TCP的,客戶端往伺服器傳送HTTP請求首先要建立TCP連線,也就是“三次握手”機制。
第一次握手:客戶端嘗試連線伺服器,向伺服器傳送syn
第二次握手:伺服器接收客戶端syn包並確認(ack=j+1),同時向客戶端傳送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態。
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。
(2)TCP連線與Socket連線的區別
socket層只是在TCP/UDP傳輸層上做的一個抽象介面層,因此一個
總結:HTTP和Socket都是基於TCP協議的。使用兩種通訊方式的情況是:
1.使用HTTP的情況:雙方不需要時刻保持連線線上,比如客戶端資源的獲取、檔案上傳等。
2.使用UDP的情況:大部分即時通訊應用(QQ、微信)、聊天室、蘋果APNs等。
github主頁:https://github.com/Bettycqupt。歡迎訪問!