1.1.1.
Introducción a la
programación con Sockets
Java proporciona
dos formas diferentes de atacar la programación de comunicaciones a través de
red, al menos en lo que a la comunicación web concierne. Por un lado están las
clases Socket, DatagramSocket y ServerSocket, y por otro lado están las clases
URL, URLEncoder y URLConnection.
Los sockets son
puntos finales de enlaces de comunicaciones entre procesos. Los procesos los
tratan como descriptores, de forma que se pueden intercambiar datos con otros
procesos transmitiendo y recibiendo a través de sockets. El tipo de sockets
describe la forma en la que se transfiere información a través de ese socket.
1.1.2.
Que son los Stream Sockets (TCP)
Son un servicio
orientado a conexión, donde los datos se transfieren sin encuadrarlos en
registros o bloques. Si se rompe la conexión entre los procesos, éstos serán
informados de tal suceso para que tomen las medidas oportunas.
El protocolo
de comunicaciones con streams es
un protocolo orientado
a conexión, ya que para establecer una comunicación utilizando el
protocolo TCP, hay que establecer en primer lugar una conexión entre un par de
sockets. Mientras uno de los sockets atiende peticiones de conexión (servidor),
el otro solicita una conexión (cliente). Una vez que los dos sockets estén
conectados, se pueden utilizar para transmitir datos en ambas direcciones.
1.1.3.
Que son los Datagram Sockets
(UDP)
Son un servicio
de transporte sin conexión. Son más eficientes que TCP, pero en su utilización
no está garantizada la fiabilidad. Los datos se envían y reciben en paquetes,
cuya entrega no está garantizada. Los paquetes pueden ser duplicados, perdidos
o llegar en un orden diferente al que se envió.
El protocolo de
comunicaciones con datagramas es un protocolo sin conexión, es decir, cada vez
que se envíen datagramas es necesario enviar el descriptor del socket local y
la dirección del socket que debe recibir el datagrama. Como se puede ver, hay
que enviar datos adicionales cada vez que se realice una comunicación, aunque
tiene la ventaja de que se pueden indicar direcciones globales y el mismo
mensaje llegará a un muchas máquinas a la vez.
1.1.4.
Stream Sockets vs. Datagram Sockets
La decisión
depende de la aplicación cliente/servidor que se esté escribiendo; aunque hay
algunas diferencias entre los protocolos que sirven para ayudar en la decisión
y decantar la utilización de sockets de un tipo.
En UDP, cada
vez que se
envía un datagrama,
hay que enviar también el descriptor del socket local y la dirección
del socket que va a recibir el datagrama, luego los mensajes son más grandes
que los TCP. Como el protocolo TCP está orientado a conexión, hay que
establecer esta conexión entre los dos sockets antes de nada, lo que implica un
cierto tiempo empleado en el establecimiento de la conexión, que no es
necesario emplear en UDP.
En UDP hay un
límite de tamaño de los datagramas, establecido en 64 kilobytes, que se pueden
enviar a una localización determinada, mientras que TCP no tiene límite; una
vez que se ha establecido la conexión, el par de sockets funciona como los
streams: todos los datos se leen inmediatamente, en el mismo orden en que se
van recibiendo.
UDP es un
protocolo desordenado, no garantiza que los datagramas que se hayan
enviado sean recibidos
en el mismo
orden por el
socket de recepción.
Al contrario, TCP es un protocolo ordenado, garantiza que todos los
paquetes que se envíen serán recibidos en el socket destino en el mismo orden
en que se han enviado.
Los datagramas
son bloques de información del tipo lanzar y olvidar. Para la mayoría de los
programas que utilicen la red, el usar un flujo TCP en vez de un datagrama UDP
es más sencillo y hay menos posibilidades de tener problemas. Sin embargo,
cuando se requiere un rendimiento óptimo, y está justificado el tiempo
adicional que supone realizar la verificación de los datos, la comunicación a
través de sockets TCP es un mecanismo realmente útil.
No hay comentarios:
Publicar un comentario