Java で PPTP 接続を作成する

Mehvish Ashiq 2024年2月15日
  1. PPTP 接続が必要な理由
  2. Java で PPTP 接続を作成する
Java で PPTP 接続を作成する

この記事では、Java を使用して Point-to-Point トンネリングプロトコル(PPTP)接続を作成する方法を学習します。

PPTP 接続が必要な理由

Point-to-Point トンネリングプロトコルは、圧縮および暗号化された Point-to-Point プロトコル(PPP)パケットをインターネット経由で送信するための IP データグラムにカプセル化するために使用されます。

IP データグラムは、プライベートネットワークとインターネットに接続された Point-to-Point トンネリングプロトコルサーバーに到達するまで、ネットワークを介してルーティングを続けます。

PPTP サーバーは、IP データグラムをポイントツーポイントプロトコル(PPP)パケットに分解(分解)し、プライベートネットワークのネットワークプロトコルを介して PPP パケットを復号化します。PPTP でサポートされているプラ​​イベートネットワークのネットワークプロトコルは、TCP/IPNetBEUIIPX であることを忘れないでください。

このチュートリアルでは、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();
  }
}

出力:

java を使用して pptp 接続を作成します-出力

ここで、クライアントは動作していますか?としてメッセージを送信します。サーバーははいで応答します。

どのように?client.java クラスと server.java クラスで何が起こるかを理解しましょう。

client.java クラスでは、Socket という名前のクラスを使用してサーバーに接続します。Socket クラスは、IP アドレスと TCP ポート番号の 2つのパラメーターを取ります。

IP アドレスはサーバーのアドレスを意味します。同じマシンで両方のプログラム(client.javaserver.java)を実行しています。そのため、localhost を作成しました。

TCP ポート番号には、サーバーで実行されたアプリケーションが表示されます。

0 から 64535 までの任意のポート番号を使用できます。このチュートリアルでは 5000 を使用しています。

ソケット接続を介した通信の目的で、入力と出力の両方にストリームを使用しています。なんで?双方向通信(クライアントからサーバーおよびサーバーからクライアント)を実装しています。

server.java クラスには、2つのソケットが必要です。1つはクライアントとの通信に使用される Socket クラスの単純なソケットであり、もう 1つはクライアントの要求を待機する ServerSocket です。

これらの要求は、クライアントが new Socket(IP アドレス、ポート番号)を使用して Socket クラスの新しいオブジェクトを作成するときにサーバー側で受信されます。

getInputStream() 関数を使用してソケットからの入力を受け入れる前に、accept() 関数はクライアントがサーバーに接続するまでブロックして待機します。ここでは、入力ストリームと出力ストリームを使用して、クライアントからデータを取得し、クライアントにデータを送信しています。

質問があるかもしれません:なぜクライアントとサーバーにストリームが必要なのですか?これは、生データをネットワーク経由で送信できないためです。

クライアントからサーバーへ、およびサーバーからクライアントへ通信するには、データをストリームに変換する必要があります。

著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook