자바에서 PPTP 연결 만들기

Mehvish Ashiq 2024년2월15일
  1. PPTP 연결이 필요한 이유
  2. Java에서 PPTP 연결 만들기
자바에서 PPTP 연결 만들기

이 기사에서는 Java를 사용하여 PPTP(Point-to-Point Tunneling Protocol) 연결을 만드는 방법을 배웁니다.

PPTP 연결이 필요한 이유

Point-to-Point Tunneling Protocol은 압축 및 암호화된 PPP(Point-to-Point Protocol) 패킷을 인터넷을 통해 전송하기 위한 IP 데이터그램으로 캡슐화하는 데 사용됩니다.

IP 데이터그램은 사설 네트워크와 인터넷에 연결된 지점간 터널링 프로토콜 서버에 도달할 때까지 네트워크를 통해 계속 라우팅됩니다.

PPTP 서버는 IP 데이터그램을 PPP(Point-to-Point Protocol) 패킷으로 분해(분해)하여 개인 네트워크의 네트워크 프로토콜을 통해 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();
  }
}

출력:

자바를 사용하여 pptp 연결 만들기 - 출력

여기에서 클라이언트는 Is it working?이라는 메시지를 보냅니다. 서버는 Yes로 응답합니다.

어떻게? client.javaserver.java 클래스에서 어떤 일이 발생하는지 이해합시다.

client.java 클래스에서 Socket이라는 클래스를 사용하여 서버에 연결합니다. Socket 클래스는 IP 주소와 TCP 포트 번호라는 두 가지 매개변수를 사용합니다.

IP 주소는 서버의 주소를 의미합니다. 동일한 시스템에서 두 프로그램(client.java & server.java)을 실행하고 있습니다. 그것이 우리가 localhost를 쓴 이유입니다.

TCP 포트 번호는 서버에서 실행되는 응용 프로그램을 표시합니다.

0에서 64535까지의 모든 포트 번호를 사용할 수 있습니다. 이 튜토리얼에서는 5000을 사용하고 있습니다.

소켓 연결을 통한 통신을 위해 입력 및 출력 모두에 스트림을 사용합니다. 왜요? 양방향 통신(클라이언트 대 서버 및 서버 대 클라이언트)을 구현하고 있습니다.

server.java 클래스에는 두 개의 소켓이 필요합니다. 하나는 클라이언트와의 통신에 사용되는 Socket 클래스의 단순 소켓이고 다른 하나는 클라이언트의 요청을 기다리는 ServerSocket입니다.

이러한 요청은 클라이언트가 new Socket(IP 주소, 포트 번호)을 사용하여 Socket 클래스의 새 개체를 만들 때 서버 측에서 수신됩니다.

소켓에서 입력을 수락하기 위해 getInputStream() 함수를 사용하기 전에 accept() 함수는 클라이언트가 서버에 연결할 때까지 차단되고 대기합니다. 여기에서 입력 및 출력 스트림을 사용하여 클라이언트에서 데이터를 가져오고 클라이언트로 데이터를 보냅니다.

질문이 있을 수 있습니다. 클라이언트와 서버에 스트림이 필요한 이유는 무엇입니까? 원시 데이터는 네트워크를 통해 보낼 수 없기 때문입니다.

클라이언트에서 서버로, 서버에서 클라이언트로 통신하려면 데이터를 스트림으로 변환해야 합니다.

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