背景
Demo基於Java實現簡單的TCP傳輸/接收協議
詞義百科
TCP協議(傳輸控制協議)
TCP協議是面向連線的通訊協議,即傳輸資料之前,在傳送端和接收端建立邏輯連線,再傳輸資料。它提供了兩臺計算機之間的可靠無差錯的資料傳輸。在TCP連線中必須要明確客戶端與伺服器,由客戶端向伺服器傳送連線請求,每次連線的建立都需要經過“三次握手”
三次握手:TCP協議中,在傳送資料的準備階段,客戶端與伺服器之間的三次互動,以保證連線的可靠
- 第一次握手:客戶端向伺服器發出連線請求,等待伺服器確認
- 第二次握手:伺服器向客戶端回送一個響應,通知客戶端收到連線請求
- 第三次握手:客戶端再次向伺服器傳送確認資訊,確認連線
完成三次握手,連線建立後,客戶端和伺服器可以開始資料傳輸,由於這種面向連線的特性。TCP協議可以保證傳輸資料的安全,所以應用十分廣泛,比如:檔案上傳、檔案下載、瀏覽頁面三次握手示意圖
四次揮手示意圖
傳送端Demo
package tcp;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
/**
* TCP 傳送資料步驟
* 1.建立客戶端socket物件
* 2.獲取輸出流,寫資料
* 3.釋放資源
*/
public class ClientDemo {
public static void main(String[] args) throws IOException {
// 建立客戶端socket物件
// 建立流套接字並將其連線到指定IP地址的指定埠號
Socket socket = new Socket(InetAddress.getByName("192.168.31.162"),9002);
// 獲取輸出流,寫資料
System.out.println("input you data");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 封裝輸出流物件
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String line ;
//獲取輸出流,寫資料;
while ((line = br.readLine()) != null){
// 獲取輸出流物件
bw.write(line);
bw.newLine();
bw.flush();
}
// 釋放資源
socket.close();
}
}
接收端Demo
package tcp;
import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
/**
* TCP 接收資料步驟
* 1.建立服務端socket物件
* 2.監聽客戶端連線,返回一個socket物件
* 3.獲取輸入流,讀資料,並把資料顯示在控制檯
* 4.釋放資源
*/
public class ServerDemo {
public static void main(String[] args) throws IOException {
// 建立服務端socket物件
ServerSocket serverSocket = new ServerSocket(9002);
// 監聽客戶端連線,返回一個socket物件
Socket socket = serverSocket.accept();
// 獲取輸入流,讀資料,並把資料顯示在控制檯
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while ((line = br.readLine()) != null){
System.out.println(line);
}
// 釋放資源
serverSocket.close();
}
}
run 控制檯
注:啟動客戶端服務必須先啟動服務端服務,否則會丟擲異常
本作品採用《CC 協議》,轉載必須註明作者和本文連結