Cliente/Servidor TCP Java [SOLUCIONADO]

Arquitectura TCP en Java

Es vital entender la comunicación TCP cuando estamos trabajando con Java. La relación cliente/servidor en una arquitectura TCP permite la transferencia de datos de manera confiable.

Creación de un cliente TCP en Java

Primero, vamos a detallar como construir el lado del cliente. Necesitaremos de las clases Socket y DataOutputStream del paquete java.net y java.io respectivamente.

import java.net.*;
import java.io.*;

public class Cliente 
{
    public static void main(String[] args)
    {
        Socket cliente;
        DataOutputStream flujo_salida;

        try {
            cliente = new Socket("localhost", 5000);
            flujo_salida = new DataOutputStream(cliente.getOutputStream());
            flujo_salida.writeUTF("Mensaje desde el cliente");
            cliente.close();
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

Creación de un Servidor TCP en Java

Luego, creamos el lado del servidor. Utilizaremos las clases ServerSocket y DataInputStream.

import java.net.*;
import java.io.*;

public class Servidor
{
    public static void main(String[] args) {
        ServerSocket servidor;
        Socket conexionCliente;
        DataInputStream flujo_entrada;

        try {
            servidor = new ServerSocket(5000);
            System.out.println("Esperando conexión...");
            conexionCliente = servidor.accept();
            flujo_entrada = new DataInputStream(conexionCliente.getInputStream());
            System.out.println("Mensaje del cliente: " + flujo_entrada.readUTF()); 
            conexionCliente.close();
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

Manejo de excepciones

Es esencial destacar que el manejo de excepciones es crucial en este tipo de aplicaciones, especialmente cuando tratamos con conexiones de red que pueden caer.

Gestión de múltiples clientes

¿Qué sucede cuando nuestra aplicación necesita manejar múltiples clientes simultáneamente? En este caso, podemos hacer uso de hilos para manejar cada conexión de cliente de manera independiente.

import java.net.*;
import java.io.*;

public class ServidorMultiCliente 
{
    public static void main(String[] args) {
        ServerSocket servidor;
        Socket conexionCliente;
        DataInputStream flujo_entrada;

        try {
            servidor = new ServerSocket(5000);
            System.out.println("Esperando conexión...");
            
            while(true) {
                conexionCliente = servidor.accept();
                Thread t = new ClienteHandler(conexionCliente);
                t.start();
            }
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

class ClienteHandler extends Thread {
    private Socket conexionCliente;
    private DataInputStream flujo_entrada;

    public ClienteHandler(Socket conexionCliente) {
        this.conexionCliente = conexionCliente;
    }

    @Override
    public void run() {
        try {
            flujo_entrada = new DataInputStream(conexionCliente.getInputStream());
            System.out.println("Mensaje del cliente: " + flujo_entrada.readUTF()); 
            conexionCliente.close();
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

Reflexiones

No olvidemos que el objetivo último de cualquier programa multi-socket es fomentar la comunicación entre aplicaciones. Con suerte, este tutorial ha aclarado algunos de los matices de la creación de estas aplicaciones en Java.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad