Crear conexión PPTP en Java

Mehvish Ashiq 15 febrero 2024
  1. Por qué necesitamos una conexión PPTP
  2. Crear conexión PPTP en Java
Crear conexión PPTP en Java

En este artículo, aprenderemos cómo crear una conexión de protocolo de túnel punto a punto (PPTP) usando Java.

Por qué necesitamos una conexión PPTP

El Protocolo de tunelización punto a punto se utiliza para encapsular el paquete del Protocolo punto a punto (PPP) comprimido y encriptado en datagramas IP para enviarlos a través de Internet.

Los datagramas IP siguen enrutándose por la red hasta llegar al Servidor de Protocolo de Tunelización Punto a Punto, conectado a la red privada e Internet.

El servidor PPTP deconstruye (desensambla) el datagrama IP en un paquete de protocolo punto a punto (PPP) y descifra el paquete PPP a través del protocolo de red de la red privada. Recuerde, el protocolo de red en una red privada compatible con PPTP es TCP/IP, NetBEUI, IPX.

Este tutorial utilizará una conexión TCP/IP. Entonces, comencemos con un ejemplo práctico.

Crear conexión PPTP en Java

Código de ejemplo (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);
  }
}

Código de ejemplo (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();
  }
}

Producción:

crear una conexión pptp usando java - salida

Aquí, el cliente envía el mensaje como Is it working? y el servidor responde con Yes.

¿Cómo? Entendamos qué sucede en las clases client.java y server.java.

En la clase client.java, usamos una clase llamada Socket para conectarnos con el servidor. La clase Socket toma dos parámetros, la dirección IP y un número de puerto TCP.

Dirección IP significa la dirección del servidor. Estamos ejecutando ambos programas (client.java y server.java) en la misma máquina; por eso escribimos localhost.

El número de puerto TCP muestra la aplicación ejecutada en el servidor.

Podemos usar cualquier número de puerto que va desde 0 a 64535. Estamos usando 5000 en este tutorial.

Para fines de comunicación a través de la conexión de socket, estamos utilizando flujos para entrada y salida. ¿Por qué? Estamos implementando una comunicación bidireccional (cliente a servidor y servidor a cliente).

En la clase server.java necesitamos dos sockets. Uno es un socket simple de la clase Socket que se utilizará para la comunicación con el cliente, y el otro es ServerSocket que espera las solicitudes del cliente.

Estas solicitudes se reciben en el lado del servidor cuando un cliente crea un nuevo objeto de la clase Socket utilizando new Socket(IP address, port number).

Antes de usar la función getInputStream() para aceptar la entrada del socket, la función accept() se bloquea y permanece hasta que el cliente se conecta con el servidor. Aquí, estamos utilizando flujos de entrada y salida para obtener los datos del cliente y enviarlos al cliente.

Es posible que tenga una pregunta: ¿Por qué necesitamos flujos para el cliente y el servidor? Es porque los datos sin procesar no se pueden enviar a través de la red.

Los datos deben convertirse en flujos para comunicarse de cliente a servidor y de servidor a cliente.

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