在 Java 中建立 PPTP 連線

在本文中,我們將學習如何使用 Java 建立點對點隧道協議 (PPTP) 連線。
為什麼我們需要 PPTP 連線
點對點隧道協議用於將壓縮和加密的點對點協議 (PPP) 資料包封裝成 IP 資料包,以便通過 Internet 傳送。
IP 資料包在網路上保持路由,直到它們到達連線到專用網路和 Internet 的點對點隧道協議伺服器。
PPTP 伺服器將 IP 資料包解構(拆解)為點對點協議 (PPP) 資料包,通過專用網路的網路協議解密 PPP 資料包。請記住,PPTP 支援的專用網路上的網路協議是 TCP/IP
、NetBEUI
、IPX
。
本教程將使用 TCP/IP
連線。所以,讓我們從一個實際的例子開始。
在 Java 中建立 PPTP 連線
示例程式碼(client.java
):
import java.io.*;
import java.net.*;
public class client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 5000);
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println("Is it working?");
printWriter.flush();
InputStreamReader in = new InputStreamReader(socket.getInputStream());
BufferedReader bufferReader = new BufferedReader(in);
String str = bufferReader.readLine();
System.out.println("server : " + str);
}
}
示例程式碼(server.java
):
import java.io.*;
import java.net.*;
public class server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new Socket(5000);
Socket socket = serverSocket.accept();
System.out.println("client connected");
InputStreamReader in = new InputStreamReader(socket.getInputStream());
BufferedReader bufferReader = new BufferedReader(in);
String str = bufferReader.readLine();
System.out.println("client : " + str);
PrintWriter printWriter = new PrintWriter(socket.getOutputStream());
printWriter.println("Yes");
printWriter.flush();
}
}
輸出:
在這裡,客戶端將訊息傳送為 Is it working?
伺服器以 Yes
響應。
怎麼會這樣?讓我們瞭解 client.java
和 server.java
類中發生了什麼。
在 client.java
類中,我們使用一個名為 Socket
的類來連線伺服器。Socket
類有兩個引數,IP 地址和 TCP 埠號。
IP 地址是指伺服器的地址。我們在同一臺機器上執行這兩個程式(client.java
和 server.java
);這就是我們寫 localhost
的原因。
TCP 埠號顯示在伺服器上執行的應用程式。
我們可以使用從 0
到 64535
的任何埠號。我們在本教程中使用 5000
。
為了通過套接字連線進行通訊,我們使用流進行輸入和輸出。為什麼?我們正在實現雙向通訊(客戶端到伺服器和伺服器到客戶端)。
在 server.java
類中,我們需要兩個套接字。一個是 Socket
類的簡單套接字,用於與客戶端通訊,另一個是等待客戶端請求的 ServerSocket
。
當客戶端使用 new Socket(IP address, port number)
建立 Socket
類的新物件時,伺服器端會收到這些請求。
在使用 getInputStream()
函式接受來自套接字的輸入之前,accept()
函式會阻塞並一直等待,直到客戶端與伺服器連線。在這裡,我們使用輸入和輸出流從客戶端獲取資料並將資料傳送到客戶端。
你可能有一個問題:為什麼我們需要客戶端和伺服器的流?這是因為原始資料無法通過網路傳送。
資料需要轉換為流,以便從客戶端到伺服器和伺服器到客戶端進行通訊。