- Los sockets son un sistema de comunicación entre procesos de diferentes máquinas de una red.
- Es un punto de comunicación por el cual un proceso puede emitir o recibir información.
- Fueron popularizados por Berckley Software Distribution, de la universidad norteamericana de Berkley.
- Son capaces de utilizar el protocolo de streams TCP (Transfer Contro Protocol) y el de datagramas UDP (User Datagram Protocol).
- Utilizan una serie de primitivas para establecer el punto de comunicación, para conectarse a una máquina remota en un determinado puerto que esté disponible, para escuchar en él, para leer o escribir y publicar información en él, y finalmente para desconectarse.
Con todas primitivas se puede crear un sistema de diálogo muy completo.
El Servidor
- Abre el canal de comunicación.
- Publica en la red la dirección del canal de comunicación.
- Espera a recibir las solicitudes o peticiones, incluso, pues crear un proceso hijo.
- Una vez que ya ha establecido la conexión, hace el envío y recepción de datos.
- Finalmente cierra el canal de comunicación.
El Cliente
- Abre el canal de comunicación.
- Establece la conexión con el servidor.
- Una vez hecha la conexión con el servidor hace el envío y recepción de datos o mensajes.
- Finalmente cierra el canal de comunicacíón.
Java y Sockets
El paquete java.net de la plataforma Java proporciona una clase Socket, la cual implementa una de las partes de la comunicación bidireccional entre un programa Java y otro programa en la red.
La clase Socket se sitúa en la parte más alta de una implementación dependiente de la plataforma, ocultando los detalles de cualquier sistema particular al programa Java. Usando la clase java.net.Socket en lugar de utilizar código nativo de la plataforma, los programas Java pueden comunicarse a través de la red de una forma totalmente independiente de la plataforma.
De forma adicional, java.net incluye la clase ServerSocket, la cual implementa un socket el cual los servidores pueden utilizar para escuchar y aceptar peticiones de conexión de clientes.
Si se intenta conectar a través de la Web, la clase URL y clases relacionadas (URLConnection, URLEncoder) son probablemente más apropiadas que las clases de sockets. Pero de hecho, las clases URL no son más que una conexión a un nivel más alto a la Web y utlilizan como parte de su implementación interna los sockets.
Modelo de comunicaciones con Java
- El servidor establece un puerto y espera durante un cierto tiempo (timeout segundos), a que el cliente establezca la conexión. Cuando el cliente solicite una conexión, el servidor abrirá la conexión socket con el método accept().
- El cliente establece una conexión con la máquina host a través del puerto que se designe en puerto#
- El cliente y el servidor se comunican con manejadores InputStream y OutputStream
Apertura de Sockets
Si estamos programando un CLIENTE, el socket se abre de la forma:
Socket miCliente;
try {
miCliente = new Socket( "maquina",numeroPuerto );
} catch( IOException e ) {
System.out.println( e );
}
Si estamos programando un SERVIDOR, el socket se abre de la forma:
Socket miServicio;
try {
miServicio = new ServerSocket( numeroPuerto );
} catch( IOException e ) {
System.out.println( e );
}
Fuente: