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.
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();
}
}