基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議
TCP :傳輸控制協議(TCP),是網際網路協議組的主要協議之一。它起源於最初的網路實施,在網路實施中,它補充了網際網路協議。
UDP: 使用者資料包協議(User Datagram Protocol)是一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務,可以保證通訊效率,傳輸延時小。
Socket:Socket程式設計用於解決我們客戶端與服務端之間通訊的問題。
TCP:
服務端(server):
1)建立ServerSocket例項,指定本地的埠,用於監聽其連線請求。
2)呼叫socket的accept()方法獲得客戶端的連線請求,通過accept()方法返回的socket例項,建立與客戶端的連線。
3)通過返回的Socket例項來獲得InputStream和OutputStream,進行資料的寫入和讀出。
4)資料傳輸結束,呼叫 socket 例項的 close() 方法關閉連線 。
客戶端(client):
1)建立Socket例項,通過指定的伺服器地址和埠建立連線。
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_TCP
和IPPTOTO_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的區別:
1、https協議需要申請證照,一般免費證照較少,因而需要一定費用。
2、http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl(Secure Sockets Layer)加密傳輸協議。
3、http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
4、http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。
結語:
所有文章已整理成文件,戳我領取更多java基礎知識手冊,也可關注後續發文。
相關文章
- 基於TCP協議的Socket網路程式設計( )TCP協議程式設計
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- Socket:UDP協議小白UDP協議
- 網路協議 - TCP/IP、HTTP、HTTPS、HTTP2.0協議TCPHTTP
- TCP和UDP協議TCPUDP協議
- TCP、UDP、HTTP及Socket的簡單講解TCPUDPHTTP
- 網路程式設計協議(TCP和UDP協議,黏包問題)以及socketserver模組程式設計協議TCPUDPServer
- TCP/IP、UDP/IP協議TCPUDP協議
- 終於懂了TCP和UDP協議區別TCPUDP協議
- 基於UDP程式設計UDP程式設計
- 好程式設計師Python培訓分享udp和tcp協議介紹程式設計師PythonUDPTCP協議
- 網路程式設計UDP協議方式程式設計UDP協議
- UDP協議網路Socket程式設計(java實現C/S通訊案例)UDP協議程式設計Java
- Python網路程式設計(socket模組、緩衝區、http協議)Python程式設計HTTP協議
- Python中兩種網路程式設計方式:Socket和HTTP協議Python程式設計HTTP協議
- 系列TCP/IP協議-UDP(009)TCP協議UDP
- TCP 和 UDP 協議簡介TCPUDP協議
- Http與Https協議HTTP協議
- HTTP和HTTPS協議HTTP協議
- .NET TCP、UDP、Socket、WebSocketTCPUDPWeb
- 【網路程式設計】Tcp/Udp程式設計TCPUDP
- 傳輸層協議 TCP 和 UDP協議TCPUDP
- Java 基於UDP 實現單播、組播、廣播 Socket 程式設計JavaUDP程式設計
- 客戶端和伺服器透過http協議基於》》tcp協議,經過三次握手進行socket連線客戶端伺服器HTTP協議TCP
- HTTP協議和HTTPS協議的異同點?HTTP協議
- 淺談TCP和UDP協議的區別TCPUDP協議
- 基於HTTP的功能追加協議HTTP協議
- DNS何時使用TCP與UDP協議?DNSTCPUDP協議
- UDP 和 TCP 兩種協議簡介UDPTCP協議
- Linux Socket C語言網路程式設計:UDP SocketLinuxC語言程式設計UDP
- TCP對應的協議和UDP對應的協議(簡單概述)TCP協議UDP
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- 重識TCP/IP協議族與HTTP基礎TCP協議HTTP
- Android程式設計師必知必會的網路通訊傳輸層協議——UDP和TCPAndroid程式設計師協議UDPTCP
- 網路協議之:基於UDP的高速資料傳輸協議UDT協議UDP
- #「HTTP 協議」90%的java程式設計師都看得懂的最全HTTP 協議講解HTTP協議Java程式設計師
- HTTP、Socket與TCPHTTPTCP
- 在Linux中,我們都知道,dns採用了tcp協議,又採用了udp協議,什麼時候採用tcp協議?什麼 時候採用udp協議?為什麼要這麼設計?LinuxDNSTCP協議UDP