Java入門:TCP協議傳送/接收資料實現

PHPer技術棧發表於2022-05-19

背景

Demo基於Java實現簡單的TCP傳輸/接收協議

詞義百科

TCP協議(傳輸控制協議)

TCP協議是面向連線的通訊協議,即傳輸資料之前,在傳送端和接收端建立邏輯連線,再傳輸資料。它提供了兩臺計算機之間的可靠無差錯的資料傳輸。在TCP連線中必須要明確客戶端與伺服器,由客戶端向伺服器傳送連線請求,每次連線的建立都需要經過“三次握手”
三次握手:TCP協議中,在傳送資料的準備階段,客戶端與伺服器之間的三次互動,以保證連線的可靠

  • 第一次握手:客戶端向伺服器發出連線請求,等待伺服器確認
  • 第二次握手:伺服器向客戶端回送一個響應,通知客戶端收到連線請求
  • 第三次握手:客戶端再次向伺服器傳送確認資訊,確認連線
    完成三次握手,連線建立後,客戶端和伺服器可以開始資料傳輸,由於這種面向連線的特性。TCP協議可以保證傳輸資料的安全,所以應用十分廣泛,比如:檔案上傳、檔案下載、瀏覽頁面

    三次握手示意圖

    TCP協議傳送/接收資料實現[TCP/IP協議入門]

    四次揮手示意圖

    TCP協議傳送/接收資料實現[TCP/IP協議入門]

傳送端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 控制檯

TCP協議傳送/接收資料實現[TCP/IP協議入門]

TCP協議傳送/接收資料實現[TCP/IP協議入門]

注:啟動客戶端服務必須先啟動服務端服務,否則會丟擲異常

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章