Saltar la navegación

2.3.- Ejemplo II.

Si añade al código anterior la utilización de sockets, tal y como se ha visto anteriormente, por parte del servidor obtiene un servidor que permite atender múltiples peticiones de forma concurrente:

Icono de un ordenador.

Servidor.java

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

class Servidor extends Thread{
    Socket skCliente;
    static final int Puerto=2000;

    public Servidor(Socket sCliente) {
        skCliente=sCliente;
    }

public static void main( String[] arg ) {
    try{
        // Inicio el servidor en el puerto
        ServerSocket skServidor = new ServerSocket(Puerto);
        System.out.println("Escucho el puerto " + Puerto );

        while(true){
             // Se conecta un cliente
Socket skCliente = skServidor.accept(); 
System.out.println("Cliente conectado");
// Atiendo al cliente mediante un thread
new Servidor(skCliente).start();
        }
    } catch (Exception e) {;}
}


public void run(){
        try {
             // Creo los flujos de entrada y salida
     DataInputStream flujo_entrada = new DataInputStream(skCliente.getInputStream());
     DataOutputStream flujo_salida= new DataOutputStream(skCliente.getOutputStream());

// ATENDER PETICIÓN DEL CLIENTE
     flujo_salida.writeUTF(“Se ha conectado el cliente de forma correcta”);

     // Se cierra la conexión
     skCliente.close();
     System.out.println("Cliente desconectado");

     } catch( Exception e ) {
         System.out.println( e.getMessage() );
     }
    }
}

Lógicamente, el funcionamiento del cliente no cambia ya que la concurrencia la realiza el servidor. A continuación puede ver un ejemplo básico de un cliente.