HTTP,TCP,UDP的理解和使用

參考資料
http://www.itdecent.cn/p/1ae1170b9a9a
Android開發(fā)進階

一、Http理解

Http是一種應(yīng)用層的協(xié)議,它基于TCP協(xié)議來進行數(shù)據(jù)傳輸。HTTP傳輸?shù)奶攸c
1.簡單快速:向服務(wù)器發(fā)送請求只需要傳遞請求方法和路徑
2.靈活:通過content-type表明傳遞的參數(shù)類型,可以傳遞任意參數(shù)
3.無連接:服務(wù)端處理完客戶端的請求,客戶端應(yīng)答后,連接自動斷開。
4.無狀態(tài):沒有辦法記錄每次連接的信息,如果后續(xù)請求需要前面的信息,只能重新傳遞一次。

交互步驟
1.客戶端端執(zhí)行網(wǎng)絡(luò)請求,從url中解析出服務(wù)器的主機名
2.將服務(wù)器 的主機名解析成為IP
3.將端口號從URL中解析出來
4.與服務(wù)器建立一條TCP連接
5.客戶端發(fā)送一條請求報文到服務(wù)器
6.服務(wù)器發(fā)送一個響應(yīng)報文給客戶端
7.客戶端解析響應(yīng)報文,關(guān)閉連接

請求方法
GET:請求獲取Request-URI所標(biāo)識的資源
POST:在Request-URI所標(biāo)識的資源后附加新的數(shù)據(jù)
HEAD 請求獲取由Request-URI所標(biāo)識的資源的響應(yīng)消息報頭
PUT 請求服務(wù)器存儲一個資源,并用Request-URI作為其標(biāo)識
DELETE 請求服務(wù)器刪除Request-URI所標(biāo)識的資源
TRACE 請求服務(wù)器回送收到的請求信息,主要用于測試或診斷
CONNECT 保留將來使用
OPTIONS 請求查詢服務(wù)器的性能,或者查詢與資源相關(guān)的選項和需求

請求報文
見參考資料鏈接
主要分為:1.請求行 2.請求報頭 3.請求數(shù)據(jù)

二、TCP數(shù)據(jù)傳輸?shù)睦斫?/h3>

TCP是傳輸控制協(xié)議,是面向連接
TCP數(shù)據(jù)是通過名為IP分組的小數(shù)據(jù)塊來發(fā)送數(shù)據(jù)的。HTTP發(fā)送數(shù)據(jù)的時候,會以流的形式打開一條TCP通道。TCP收到數(shù)據(jù)后,會講數(shù)據(jù)分割成小數(shù)據(jù)段,并將數(shù)據(jù)封裝在IP組中。通過因特網(wǎng)進行傳遞。

三、JAVA中使用Socket API實現(xiàn)TCP編程

一個程序作為客戶端還是服務(wù)端取決于它使用的Socket API
1.客戶端 : Socket
2.服務(wù)端 : SocketServer

客戶端:
創(chuàng)建一個Socket實例向指定的服務(wù)端地址建立一個TCP協(xié)議的連接通道。
1.SocketAddress:使用識別網(wǎng)絡(luò)主機
2.dstName:主機名稱、IP
3.dstPort : 端口號

Paste_Image.png

服務(wù)端:
當(dāng)客戶端創(chuàng)建Socket對象成功,進行連接成功時,此時只是把請求加入到服務(wù)端的請求隊列中,必須要等到服務(wù)端的accept方法調(diào)用后,連接通道才正式建立,可以互相通信。accept方法是從請求隊列中,取出連接請求。
創(chuàng)建一個Socket服務(wù)端,并且指定端口號,負(fù)責(zé)監(jiān)聽該端口下收到的連接。
**backlog **參數(shù)負(fù)責(zé)設(shè)置服務(wù)端允許的請求連接數(shù)。

Paste_Image.png
Paste_Image.png

四、UDP協(xié)議

UDP數(shù)據(jù)報協(xié)議,是一種和TCP對應(yīng)的協(xié)議,它不進行連接,而是直接把數(shù)據(jù)丟出去。所以傳遞數(shù)據(jù)非???,但是容易丟包。通常音頻、視頻和普通數(shù)據(jù)在傳送時使用UDP較多
UDP編程需要DatagramPacket和DatagramSocket。因為UDP協(xié)議不建立連接,所以沒有服務(wù)端和客戶端。
UDP:發(fā)送端

  1. 建立udpsocket服務(wù)端點。該端點建立,系統(tǒng)會隨機分配一個端口。如果不想隨機配置,可以手動指定。 DatagramSocket ds = new DatagramSocket(9002);
  2. 將數(shù)據(jù)進行packet包的封裝,必須要指定目的地地址和端口。
    DatagramPacket dp =new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),9001)
DatagramSocket mDatagramSocket = new DatagramSocket(udpServerPort);
//使用線程池開啟一個線程
getExecutorService().execute(new UDPReceiveRunnable(mDatagramSocket));

UDP接收線程

Paste_Image.png

UDP發(fā)送線程
發(fā)送時必須要給DatagramPacket指定目的地,使用InetAddress來指定目的地

Paste_Image.png
Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 參考:http://www.2cto.com/net/201611/569006.html TCP HTTP UD...
    F麥子閱讀 3,069評論 0 14
  • 轉(zhuǎn)。。。。。。。。 SOCKET,TCP/UDP,HTTP,FTP (一)TCP/UDP,SOCKET,HTTP,...
    zeqinjie閱讀 3,386評論 1 53
  • 1.1 TCP/IP協(xié)議組 TCP/IP協(xié)議(傳輸控制協(xié)議)由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成 IP層負(fù)責(zé)...
    F麥子閱讀 2,920評論 0 25
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評論 19 139
  • 網(wǎng)絡(luò)層級結(jié)構(gòu) 網(wǎng)絡(luò)由下往上分為:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層和應(yīng)用層(大學(xué)基礎(chǔ)) ip協(xié)議:...
    aafa41d78d15閱讀 1,020評論 0 3

友情鏈接更多精彩內(nèi)容