Saltar la navegación

2.1.- Servidor.

Los pasos que realiza el servidor para realizar una comunicación son:

  • Publicar puerto. Se utiliza el comando ServerSocket indicando el puerto por donde se van a recibir las conexiones.
  • Esperar peticiones. En este momento el servidor queda a la espera a que se conecte un cliente. Una vez que se conecte un cliente se crea el socket del cliente por donde se envían y reciben los datos.
  • Envío y recepción de datos. Para poder recibir/enviar datos es necesario crear un flujo (stream) de entrada y otro de salida. Cuando el servidor recibe una petición, éste la procesa y le envía el resultado al cliente.
  • Una vez finalizada la comunicación se cierra el socket del cliente.
Esquema de funcionamiento interno del modelo cliente/servidor en el que se muestran las diferentes módulos de funcionamiento y su interconexión.
Esquema de funcionamiento interno del modelo cliente/servidor

Para publicar el puerto del servidor se utiliza la función ServerSocket a la que hay que indicarle el puerto a utilizar. Su estructura es:

ServerSocket skServidor = new ServerSocket(Puerto);

Una vez publicado el puerto, el servidor utiliza la función accept() para esperar la conexión de un cliente. Una vez que el cliente se conecta, entonces se crea un nuevo socket por donde se van a realizar todas las comunicaciones con el cliente y servidor.

Socket sCliente = skServidor.accept();

Una vez recibida la petición del cliente el servidor se comunica con el cliente a través de streams de datos que veremos en el siguiente punto.

Finalmente, una vez terminada la comunicación se cierra el socket de la siguiente forma:

sCliente.close();

A continuación se muestra el código comentado de un servidor

import java.io.* ;
import java.net.* ;
class Servidor {
    static final int Puerto=2000;
    public Servidor( ) {
    try {
        // Inicio la escucha del servidor en un determinado puerto
        ServerSocket skServidor = new ServerSocket(Puerto);
        System.out.println("Escucho el puerto " + Puerto );
        // Espero a que se conecte un cliente y creo un nuevo socket para el cliente
        Socket sCliente = skServidor.accept(); 
        // ATENDER PETICIÓN DEL CLIENTE
        // Cierro el socket
        sCliente.close();
        }
    } catch( Exception e ) {
        System.out.println( e.getMessage() );
}
public static void main( String[] arg ) {
    }
     new Servidor();
 }
}