Socket en Java
Socket en Java
1.
Introducci
on
Las redes actuales utilizan el packet switching para la transferencia de datos. Los datos
se envuelven en paquetes que se transfieren desde un origen a un destino, donde se extraen
de uno en uno los datos de uno o mas paquetes para reconstruir el mensaje original.
Los nodos que se comunican a traves de Internet utilizan principalmente dos protocolos:
tcp - Transsmision Control Protocol
udp - (Universal | User) Datagram Protocol
El protocolo udp - (User | Universal) Datagram Protocol - se utiliza para comunicaciones en la que no se garantiza una transmision fiable (reliable). udp no esta orientado a
conexion, por lo tanto no garantiza la entrega. udp enva paquetes de datos independientes,
denominados datagramas, desde una aplicacion a otra.
El envo de datagramas es similar a enviar una carta a traves del servicio postal: El
orden de salida no es importante y no esta garantizado, y cada mensaje es independiente
de cualquier otro.
En las comunicaciones basadas en datagramas como las udp, el paquete de datagramas
contiene el n
umero de puerto de su destino y udp encamina el paquete a la aplicacion
apropiada, como ilustra la figura 1.
El API Java para udp proporciona una abstracion del paso de mensajes, esto es,
la forma mas simple de comunicacion entre ordenadores. Esto hace posible a un proceso
emisor transmitir un u
nico mensaje a un proceso receptor. Los paquetes independientes
que contienen esos mensajes se denominan datagramas. En Java, el emisor especifica el
destino usando un socket (una referencia indirecta a un puerto particular usada por el
proceso receptor en la maquina receptora).
1
Figura 1:
2.
La clase DatagramPacket
direcci
on Intenet
n
umero de puerto
Los objetos del tipo DatagramPacket se pueden transmitir entre procesos cuando un
proceso los enva y otro los recibe.
Esta clase proporciona otro constructor para usarlo cuando se recibe un mensaje. Sus
argumentos especifican un array de bytes en el que recibir el mensaje y la longitud del
array. Cuando se recibe un mensaje se pone en el DatagramPacket junto con su longitud,
la direccion de Internet y el puerto del socket de envo.
Se puede obtener el mensaje del objeto DatagramPacket mediante el metodo getData().
Los metodos getPort() y getAddress() permiten obtener el puerto y la direccion Internet
del objeto de tipo DatagramPacket.
El proceso receptor del mensaje tiene que especificar un array de bytes de un tama
no
determinado en el cual recibir el mensaje, esto es, ha de predecir el Tama
no del Mensaje. Si
el mensaje es muy grande para el array se trunca cuando llega. El protocolo ip subyacente
permite longitudes de paquetes de mas de 216 bytes, que incluye tanto las cabeceras como
los mensajes. Sin embargo, la mayora de los entornos imponen una restriccion en el tama
no
a 8 kilobytes. Cualquier aplicacion que necesite mensajes mayores que el maximo, debe
fragmentarlos en pedazos de ese tama
no. Generalmente, una aplicacion decidira sobre un
tama
no que no sea excesivamente grande pero que se adecue a su uso previsto.
3.
La clase DatagramSocket
connect().
Este metodo se utiliza para conectar a un puerto remoto particular y una direccion
de Internet, en este caso el socket solo es capaz de enviar y recibir mensajes desde
esa direccion.
4.
Ejemplo
5.
Ejercicio