網路通訊協議
TCP/IP 協議
- 將網路傳輸分為四層模型:
- 應用層:規定應用之間傳輸的格式,HTTP,FTP 協議等
- 傳輸層:將資料傳輸到網路層,TCP,UDP
- 網路層:核心,將傳輸資料分組,傳輸到接收端,IP 協議
- 鏈路層:對網路連線裝置的驅動協議,光纖,網線
UDP (User Datagram Protocol) 使用者資料包協議
- 無連線通訊協議,接收端傳送端不用建立連線
- 耗資小,傳輸效率高:影片直播…
- 偶爾丟包,但無太大影響
- 不對報文進行重組,分片,所以需要注意資料大小,資料大小限制在 64KB 以內
- 網路包中頭部有8個位元組
TCP (Transmission Control Protocol) 傳輸控制協議
- 需要客戶端和伺服器透過三次握手建立連線
- 第一次握手:客戶端向伺服器傳送連線請求,等待伺服器確認
- 第二次握手:伺服器給客戶端響應,通知其收到了連線請求
- 第三次握手:客戶端再次傳送確認資訊,確認連線
- 有確認機制,丟包可以重發
- 可以對大資料拆分,客戶端進行重組
- 網路包中頭部有32位元組
IP地址
- 網路中計算機裝置的唯一編號
- IPv4:32位二進位制,4個位元組
- IPv6:128位二進位制,8組16進位制數
埠號
- 兩個位元組組成,在 0~65535之間,1024前的埠號已經被系統分配完成,無法使用
- 每個軟體有隨機分配的單獨埠號,無法重複
- 保證資料準確無誤傳輸到對方計算機指定軟體上
- 常用埠號
- 80:網路埠號
- 3306:mysql 埠號;1521:oracle 埠號
- 8080:Tomcat 埠號
伺服器端和客戶端的互動
- 根據網路通訊協議,透過三次握手進行連線
- 在 Java 中透過 IO 流來傳輸資料
- 伺服器本身沒有 IO 流物件,透過 accept() 方法獲取客戶端的 IO 流物件和該客戶端進行互動
- Java 中為了建立 TCP 通訊,為客戶端提供了 Socket 類,為伺服器提供了 ServerSocket 類
Socket 和 Server Socket
伺服器端
ServerSocket(int port)
繫結到指定埠號- 使用 accept() 獲取請求的客戶端物件
- 使用步驟:
- 建立 ServerSocket 物件和系統指定埠號
- 使用 accept() 獲取請求的客戶端物件 Socket
- 使用 getInputStream() 獲取客戶端的位元組輸入流物件
- 使用 InputStream 中的 read,讀取客戶端傳送的資料
- 使用 getOutputStream()獲取客戶端位元組輸出流物件
- 使用 OutputStream 中的 write,給客戶端寫回資料
- 釋放資源
客戶端
Socket(String host, int port)
指定 IP 地址和埠- 使用步驟和伺服器端基本相同,要透過 Socket 的 getInputStream(),getOnputStream() 方法獲取位元組輸入輸出流
本作品採用《CC 協議》,轉載必須註明作者和本文連結