基於TCP/UDP的Socket編程,HTTP/HTTPS協議

TCP :傳輸控制協議(TCP),是互聯網協議組的主要協議之一。它起源於最初的網絡實施,在網絡實施中,它補充了互聯網協議。java

UDP: 用戶數據報協議(User Datagram Protocol)是一種無鏈接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務,能夠保證通信效率,傳輸延時小。編程

Socket:Socket編程用於解決咱們客戶端與服務端之間通訊的問題。數組


TCP:

服務端(server):安全

1)建立ServerSocket實例,指定本地的端口,用於監聽其鏈接請求。服務器

2)調用socket的accept()方法得到客戶端的鏈接請求,經過accept()方法返回的socket實例,創建與客戶端的鏈接。網絡

3)經過返回的Socket實例來得到InputStream和OutputStream,進行數據的寫入和讀出。負載均衡

4)數據傳輸結束,調用 socket 實例的 close() 方法關閉鏈接 。socket

客戶端(client):函數

1)建立Socket實例,經過指定的服務器地址和端口創建鏈接。post

2)經過Socket實例獲取InputStream和OutputStream進行數據讀寫。

3)數據傳輸結束,調用 socket 實例的 close() 方法關閉鏈接。

UDP:

服務端(server):

1)指定本地端口建立 DatagramSocket 實例

2)經過字節數組,建立 DatagramPacket 實例,調用 DatagramSocket 實例的 receive() 方法,用 DatagramPacket 實例來接收數據

3)設置 DatagramPacket 實例返回的數據,調用 DatagramSocket 實例的 send() 方法來發送數據

4)數據傳輸完成,調用 DatagramSocket 實例的 close() 方法

客戶端(client):

1)建立 DatagramSocket 實例

2)經過 IP 地址端口和數據建立 DatagramSocket 實例,調用 DatagramSocket 實例 send() 方法發送數據包

3)經過字節數組建立 DatagramSocket 實例,調用 DatagramSocket 實例 receive() 方法接受數據包

4)數據傳輸完成,調用 DatagramSocket 實例的 close() 方法


Socket編程的API接口:

(1)建立socket:socket()函數

函數原型:

int socket(int af, int type, int protocol);
  • af:爲 IP 地址類型,經常使用的有 AF_INET 和 AF_INET6

  • type:type 爲數據傳輸方式,經常使用的有 面向鏈接(SOCK_STREAM)方式(即TCP) 和 無鏈接(SOCK_DGRAM)的方式(即UDP)。

  • protocol:套接口所用的協議,經常使用的有 IPPROTO_TCPIPPTOTO_UDP,分別表示 TCP 傳輸協議和 UDP 傳輸協議。

(2)綁定套接字:bind()函數

函數原型:

int bind(int sock, struct sockaddr *addr, socklen_t addrlen);
  • sock參數:sock 爲 socket 文件描述符。
  • addr參數:addr 爲 sockaddr 結構體變量的指針。
  • addrlen參數:addrlen 爲 addr 變量的大小,可由 sizeof() 計算得出。

(3)創建鏈接:connect()函數

函數原型:

int connect(int sock, struct sockaddr *serv_addr, socklen_t addrlen);

參數與bind()的參數相似。

(4)監聽:listen()函數

函數原型:

int listen(int sock, int backlog);
  • sock參數:sock 爲須要進入監聽狀態的套接字。
  • backlog參數:backlog 爲請求隊列的最大長度。

(5)接收請求:accept()函數

函數原型:

int accept(int sock, struct sockaddr *addr, socklen_t *addrlen);
  • sock參數:sock 爲服務器端套接字。
  • addr參數:addr 爲 sockaddr_in 結構體變量。
  • addrlen參數:addrlen 爲參數 addr 的長度,可由 sizeof() 求得。
  • 返回值:一個新的套接字,用於與客戶端通訊。

(6)關閉:close()函數

函數原型:

int close(int fd);
  • fd:要關閉的文件描述符。

HTTP協議:

HTTP超文本傳輸協議,HTTP協議主要就是用來進行客戶端和服務器之間進行通訊的標準協議。HTTP主要規定了客戶端如何與服務器創建鏈接、客戶端如何從服務器請求數據、服務器如何響應請求,以及最後鏈接如何關閉。

創建鏈接:根據用戶輸入的URL地址,經過DNS、負載均衡等技術找到一臺服務器,客戶端與服務器的80端口創建一個TCP連接

進行請求:客戶端向服務器發送消息,請求URL中指定的頁面,要求執行指定的操做,包括 get post head

響應:服務器向客戶端發送響應。響應以狀態碼開頭。

關閉鏈接:客戶端或服務端均可以關閉鏈接。每一個請求都是用一個單獨的網絡鏈接

缺點:

(1)通訊使用明文不加密,內容可能被竊聽

(2)不驗證通訊方身份,可能遭到假裝

(3)沒法驗證報文完整性,可能被篡改

HTTPS協議:

超文本傳輸安全協議。是以安全爲目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。HTTP和HTTPS是兩個不一樣的協議。

主要做用:

1)創建一個信息安全通道,來保證數據傳輸的安全;

2)確認網站的真實性。

HTTP和HTTPS的區別:

一、https協議須要申請證書,通常免費證書較少,於是須要必定費用。

二、http是超文本傳輸協議,信息是明文傳輸,https則是具備安全性的ssl(Secure Sockets Layer)加密傳輸協議。

三、http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。

四、http的鏈接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

結語: 全部文章已整理成文檔,戳我領取更多java基礎知識手冊,也可關注後續發文。

相關文章
相關標籤/搜索