Socket Stream
Introducción
Un socket es una interfaz de entrada-salida de datos que permite la intercomunicación entre procesos. Anteriormente se trató el tema de sockets datagrama (no orientados a conexión), sin embargo los sockets stream son los más utilizados y es el tema que se tratará en esta entrada.
Mientras que el API de sockets datagrama permite el intercambio de unidades discretas de datos (es decir, datagramas), el API de sockets en modo stream proporciona un modelo de transferencia de datos basado en la E/S en modo stream de los sistemas operativos Unix. Por definición, un socket en modo stream proporciona sólo comunicaciones orientadas a conexión.
Socket Stream
Los sockets son mecanismos de comunicación entre procesos que permiten que un proceso hable ( emita o reciba información ) con otro proceso incluso estando en distintas máquinas.
Fiabilidad de la Transmisión. No se pierden los datos transmitidos.
Conservación del Orden de los Datos. Los datos llegan en el orden en que se emitieron.
No Duplicación de los Datos. El Dato sólo llega una vez.
Comunicación en modo conectado. La conexión está establecida antes de iniciar la comunicación. De este modo, la emisión desde un extremo va destinada al otro (implícitamente).
Servidor: es el programa que permanece pasivo a la espera de que alguien solicite conexión con él.
- Está ejecutándose y esperando a que otro quiera conectarse a él.
- Sirve la información que se le pida.
Cliente: es el programa que solicita la conexión para pedir datos al servidor
- En el momento de ejecutarlo o cuando lo necesite, intenta conectarse al servidor.
- Solicita información al servidor.
El servidor creará un socket, utilizando ServerSocket, le asignará un puerto y una dirección, una vez haga el accept para esperar llamadas, se quedará bloqueado a la espera de las mismas. Una vez llegue una llamada el accept creará un Socket para procesarla.
A su vez, cuando un cliente desee establecer una conexión, creará un socket y establecerá una conexión al puerto establecido. Sólo es en este momento, cuando se da una conexión real y se mantendrá hasta su liberación mediante close().
Para poder leer y escribir datos, los sockets disponen de unos stream asociados, uno de entrada (InputStream) y otro de salida (OutputStream) respectivamente. Para obtener estos streams a partir del socket se utiliza:
- ObjetoDeTipoSocket.getInputStream ()
Devuelve un objeto de tipo InputStream. - ObjetoDeTipoSocket.getOutputStream ()
Devuelve un objeto de tipo OutputStream.
Para leer los datos se necesita un BufferedReader y para escribirlos un PrintWriter.
Al momento de enviarlos debe invocarse el método objPrintWriter.flush()
Conclusiones
Los sockets stream presentan muchas ventajas frente a los socket datagrama, por esta razón son el tipo de sockets más utilizado. Además, su funcionamiento es fácil de entender y sencillo de implementar, por lo tanto, a pesar de que existen otras herramientas como RMI o web socket siguen siendo utilizados.
No hay comentarios:
Publicar un comentario