Sistemas Distribuidos
Introducción
En los sistemas operativos computacionales, existen varias formas de comunicarse de computadora a computadora, y una de ellas es por medio del Socket Stream. Esta herramienta es usualmente implementada sobre el modelo TCP y así las aplicaciones se pueden ejecutaren cualquier red. En el desarrollo hablaremos con mas profundidad acerca del API de Socket Stream.
Desarrollo
Diferencias entre Socket Datagrama y Socket Stream
En el API de Socket Datagrama se basa en el intercambio de unidades discretas de datos, es decir, datagramas, para poder recibir y enviar infomación de una computadora a otra. El Socket Datagrama utilizaba UDP, y pueden o no estár orientados a conexión
Por otro lado, el Socket en modo Stream no utiliza Datgramas para poder comunicarese, sino que proporciona un modelo de transferencia de datos basado en la E/S en modo stream, es decir, proporciona sólo comunicaciones orientadas a conexión.
Por otro lado, el Socket en modo Stream no utiliza Datgramas para poder comunicarese, sino que proporciona un modelo de transferencia de datos basado en la E/S en modo stream, es decir, proporciona sólo comunicaciones orientadas a conexión.
¿Cómo funciona el Socket Stream?
En un Socket Stream los datos se transfieren utilizando el concepto de un flujo de datos continuo que fluye desde una fuente a un destino (también llamado sumidero). Los datos se insertan, o escriben, dentro de un flujo por un proceso que controla la fuente y los datos se extraen, o leen, del flujo por un proceso asociado al destino.
Pora poder mandar mensajes, las unidades de datos escritas y leídas no necesitan coincidir. Por ejemplo, 100 bytes de datos escritos utilizando una operación pueden leerse usando una operación de lectura de 20 bytes, seguida por otra operación read de 80 bytes.
Pora poder mandar mensajes, las unidades de datos escritas y leídas no necesitan coincidir. Por ejemplo, 100 bytes de datos escritos utilizando una operación pueden leerse usando una operación de lectura de 20 bytes, seguida por otra operación read de 80 bytes.
API de Socket Stream
El API de sockets en modo stream es una extensión del modelo de E/S en modo stream. Usando el API, cada uno de los dos procesos crea individualmente un socket en modo stream. A continuación, se forma una conexión entre los sockets. Los datos se escriben, como un flujo de caracteres, dentro del socket del emisor y, a continuación, el receptor puede leerlos a través de su socket.
Clases utilizadas en Java
En Java, las clases
ServerSocket
y Socket
proporcionan el API de sockets en modo stream. La sintaxis del API está estrechamente vinculada con el paradigma cliente-servidor. Hay dos tipos de sockets en el API en modo stream los cuales son:-Clase
Esta clase se encarga de proporcionar el primer tipo de ServerSocket
:socket
y sirve para aceptar conexiones.Metodos principales y constructores
ServerSocket(int puerto)
: Crea un socket de servidor en un puerto especificado.Socket accept() throws IOException
: Espera que se solicite una conexión a este socket y la acepta. El método bloquea hasta que se haga una conexión. void close() throws IOException
: Cierra este socket.void setSoTimeont(int plazo) throws SocketException
: Fija un plazo máximo de tiempo de espera (en milisegundos), de manera que una llamada accept()
sobre este socket bloquee durante sólo esta cantidad de tiempo. Si el plazo expira, se activa una excepcion java.io.interruptedlOException
-Clase
Se encarga de proporcionar el otro tipo de Socket
:socket
que permite intercambiar datos.Metodos principales y constructores
Socket(InetAddress dirección, int puerto)
: Crea un socket stream y lo conecta al número de puerto y la direcdón IP especificados.void close() throws IOException
: Cierra este socket.InputStream getlnputStream() throws IOException
: Devuelve un flujo de entrada para que se puedan leer los datos de este socket. OutputStream getOutputStream() throws IOException
: Devuelve un flujo de salida para que se puedan escribir los datos en este socket. Void setSoTimeout(int plazo) throws SocketException
: Fija un periodo máximo de bloqueo de manera que una llamada read()
en el InputStream asociado con este socket bloquee sólo durante esta cantidad de tiempo. Si el plazo de tiempo expira, se activa una excepcion Java.io.InterruptedIOException()
.
Proceso Servidor
Para llevar a cabo el proceso servidor, se establece un ServerSocket
y después se queda a la espera de las peticiones de conexión de otros procesos. Las peticiones de conexión se aceptan de una en una. A través del Socket
, el proceso servidor puede leer y/o escribir del flujo de datos. Cuando se termina la sesión de comunicación entre los dos procesos, se cierra el Socket
, y el servidor está preparado para aceptar la próxima petición de conexión a través del ServerSocket.
Proceso Cliente
Para llevar a cabo este proceso un cliente debe de crea un Socket
, a continuación, a través del socket del servidor, solicita una conexión al servidor. Una vez que se acepta la petición, el socket del cliente se conecta al Socket
del servidor de manera que el cliente pueda pasar a leer y/o escribir del flujo de datos. Cuando se completa la sesión de comunicación entre los dos procesos, se cierran los sockets de datos.
Conclusión
En conclusión, los sockets stream ofrecen un servicio orientado a conexión, donde los datos se transfieren como un flujo continuo, sin encuadrarlos en registros o bloques. Este tipo de socket se basa en el protocolo TCP, que es un protocolo orientado a conexión. Esto implica que antes de transmitir información hay que establecer una conexión entre los dos sockets. Mientras uno de los sockets atiende peticiones de conexión (servidor), el otro solicita la conexión (cliente). Una vez que los dos sockets están conectados, ya se puede transmitir datos en ambas direcciones. El protocolo incorpora de forma transparente al programador la corrección de errores. Es decir, si detecta que parte de la información no llegó a su destino correctamente, esta volverá a ser trasmitida. Además, no limita el tamaño máximo de información a transmitir.
Referencias bibliográficas:
1. Liu. M. (2004). Computación Distribuida: Fundamentos y Aplicaciones. Madrid: PEARSON EDUCACIÓN.
Comentarios
Publicar un comentario