Tiempo atrás, vimos un ejemplo básico de Servidor y Cliente TCP en Python. Hoy veremos un ejemplo igual, pero en Java.

Incluso, pueden probar levantar el Servidor Python y el Cliente Java y ver que todo funciona de la misma forma, como debe ser; por algo ambos son "Sockets TCP" ¿no?

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Servidor {

    public static void main(String[] args) {

        ServerSocket    s;  //Socket servidor
        Socket      sc;      //Socket cliente

        PrintStream     p;    //Canal de escritura
        BufferedReader  b;      //Canal de Lectura
       
        String    mensaje;
       
        try {
            //Creo el socket server
            s = new ServerSocket(9999);
           
            //Invoco el metodo accept del socket servidor, me devuelve una referencia al socket cliente
            sc = s.accept();
           
            //Obtengo una referencia a los canales de escritura y lectura del socket cliente
            b = new BufferedReader( new InputStreamReader ( sc.getInputStream() ) );
            p = new PrintStream   ( sc.getOutputStream() );

            while ( true ) {
                //Leo lo que escribio el socket cliente en el canal de lectura
                mensaje = b.readLine();
                System.out.println(mensaje);
               
                //Escribo en canal de escritura el mismo mensaje recibido
                p.println(mensaje);

                if ( mensaje.equals("by")) {
                    break;
                }
            }
           
            p.close();
            b.close();
           
            sc.close();
            s.close();
        } catch (IOException e) {
            System.out.println("No puedo crear el socket");
        }
    }

}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Cliente {

    public static void main(String[] args) {

        Socket      s;
        PrintStream             p;
        BufferedReader    b;

        String          host = "localhost";
        int      port = 9999;
        String          respuesta;

        //Referencia a la entrada por consola (System.in)
        BufferedReader    in = new BufferedReader(new InputStreamReader(System.in));

        try {

            //Creo una conexion al socket servidor
            s = new Socket(host,port);  

            //Creo las referencias al canal de escritura y lectura del socket
            p = new PrintStream(s.getOutputStream());
            b = new BufferedReader ( new InputStreamReader ( s.getInputStream() ) );

            while ( true ) {
                //Ingreso un String por consola
                System.out.print("Mensaje a enviar: ");

                //Escribo en el canal de escritura del socket
                p.println( in.readLine() );
               
                //Espero la respuesta por el canal de lectura
                respuesta = b.readLine();
                System.out.println(respuesta);
                if ( respuesta.equals("by")) {
                    break;
                }           
            }
            p.close();
            b.close()
            s.close();

        } catch (UnknownHostException e) {
            System.out.println("No puedo conectarme a " + host + ":" + port);
        } catch (IOException e) {
            System.out.println("Error de E/S en " + host + ":" + port);
        }
    }
}