Вы находитесь на странице: 1из 9

Tema: Socket Udp Catedratico: Ing Geovanny Vega Integrantes: Kenya Analuiza Katherin Palacios Maria Engracia Morayma

Oramas Curso: VIII Sistemas

Ao Lectivo 2013

Introduccin
En los sockets TCP es necesario establecer una conexin. El servidor TCP espera que un cliente TCP se le conecte. Una vez hecha la conexin, se pueden enviar mensajes. El protocolo TCP garantiza que todos los mensajes enviados van a llegar bien y en el orden enviado. Slo el cliente necesita saber dnde est el servidor y en qu puerto est escuchando. Por el contrario, en los sockets UDP no se establece conexin. El servidor se pone a la escucha de un puerto de su ordenador. El cliente tambin se pone a la escucha de un puerto de su ordenador. En cualquier momento, cualquiera de ellos puede enviar un mensaje al otro. Ambos necesitan saber en qu ordenador y en qu puerto est escuchando el otro. Aqu el concepto de cliente y servidor est un poco ms difuso que en el caso de TCP. Podemos considerar servidor al que espera un mensaje y responde. Cliente sera el que inicia el trasiego de mensajes. El servidor debera, adems, estar siempre arrancado y a la escucha.

Objetivo General Realizar un ejercicio practico en Java para comprobar el funcionamiento de socket Udp

Objetivos Especficos Conceptualizar acerca de Socket Udp Analizar la diferencia de la programacin socket Tcp/Ip con socket Udp

UDP UDP es a veces llamado el Protocolo Universal de Datagramas Es uno de los protocoles base del Conjunto de Protocolos de Internet. Por medio del UDP, programas en computadores conectados por red pueden enviar mensajes cortos a veces conocidos como datagramas (usando Datagram Sockets) de un lado al otro. Udp no garantiza la confiabilidad o el orden de la manera en que lo hace TCP. Los Datagramas pueden llegar en distinto orden, aparecer duplicados, o perderse sin informar. Al evitar el trabajo de revisar si cada paquete de verdad lleg hace a UDP ms rpido y ms eficiente, para aplicaciones que no necesitan envos garantizados. Aplicaciones sensibles al tiempo a menudo usan UDP porque los paquetes recientemente enviados tienen preferencia a los paquetes atrasados. La naturaleza de la falta de estados de UDP tambin es til para servidores que responden pequeas consultas de un enorme nmero de clientes. A diferencia de TCP, UDP es compatible con broadcast de paquetes (enviando a todos en una red local) y multicasting (enviar a todos los suscritos). CARACTERSTICAS

Cliente: enva directamente datagramas al servidor, queda a la espera de respuesta. Servidor: lee datagramas de cola de espera, procesa y responde a los clientes y vuelve a la cola y lee el datagrama siguiente (servidor iterativo). UDP: protocolo de transporte no orientado a conexin y que no garantiza ni la entrega ni el orden en que dichos datagramas son enviados. Aplicacin cliente/servidor deber tener en cuenta las caractersticas del protocolo. Aplicaciones UDP: DNS, NFS, SNMP, VoIP (y en general de distribucin), difusin (multidestino).

VENTAJA

Una ventaja es que con este tipo de sockets es que un programa puede recibir mensajes de varios sitios a la vez. Si se est escuchando por un socket no orientado a conexin, cualquier otro programa en otro computador puede enviarle un mensaje. El programa servidor no necesita preocuparse de establecer y mantener conexiones con varios clientes a la vez

DESVENTAJA Es un protocolo menos fiable. Los procesos que hagan uso de UDP han de implementar, si es necesario, sus propias rutinas de verificacin de envo y sincronizacin

JAVA

Java proporciona dos clases para dar soporte a la comunicacin va datagramas UDP, todas ellas contenidas en el paquete java.net. Estas clases son DatagramSocket y DatagramPacket

DatagramPacket: proporciona constructores para crear instancias a partir de los datagramas recibidos y para crear instancias de datagramas que van a ser enviados. 1. Constructores para datagramas que van a ser enviados; DatagramPacket(byte[] buf, int length) y compuesta por una

DatagramPacket(byte[] buf, int length, InetAddress address, int port). Estos constructores crean una instancia de datagrama

cadena de bytes que almacena el mensaje, la longitud del mensaje y la direccin de Internet y el nmero de puerto local del conector destino, tal y como sigue:
+-----------+--------------------+----------------+--------------------+ +-----------+--------------------+----------------+--------------------+ | MENSAJE | LONGITUD MENSAJE | DIRECCION IP | NMERO DE PUERTO |

2. Constructores para datagramas recibido: DatagramPacket(byte[] buf, int offset, int length) y DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port). Estos constructores nos permiten que alojar el mensaje, la longitud de la misma y el offset dentro de la cadena. Dentro de esta clase hay mtodos para obtener los diferentes componentes de un datagrama, tanto recibido como enviado: getData() : para obtener el mensaje contenido en el datagrama. getPort(): para obtener el puerto.

crear instancias de los datagramas recibidos, especificando la cadena de bytes en la

getAddress() : para obtener la direccin IP.

DatagramSocket: maneja sockets para enviar y recibir datagramas UDP. Proporciona tres constructors: 1. DatagramSocket(): constructor sin argumentos que permite que el sistema elija 2. DatagramSocket(int port): constructor que toma un nmero de puerto como argumento, apropiado para los procesos que necesitan un nmero de puerto (servicios). un puerto entre los que estn libres y selecciona una de las direcciones locales.

3. DatagramSocket(int port, InetAddress laddr): constructor que toma como La clase DatagramSocket proporciona varios mtodos, destacamos los ms utilizados: send(DatagramPacket p) y receive(DatagramPacket p): estos mtodos sirven para instancia de DatagramPacket conteniendo el mensaje y el destino. El argumento de receive es un DatagramPacket vaco en el que colocar el mensaje, su longitud y su origen. Ambos mtodos pueden lanzar excepciones IOException transmitir datagramas entre un par de conectores. El argumento de send es una argumentos el nmero de puerto y una determinada direccin local.

setSoTimeout(int timeout): este mtodo permite establecer un tiempo de espera lmite. Cuando se fija un lmite, el mtodo receive se bloquea durante el tiempo fijado y despus lanza una excepcin InterruptedIOException

connect(InetAddress address, int port): este mtodo se utiliza para conectarse a un puerto remoto y a una direccin Internet concretos, en cuyo caso el conector slo podr enviar y recibir mensajes de esa direccin. COMUNICACIONES ENTRE CLIENTE SERVIDOR Java proporciona dos clases importantes en la implementacin de aplicaciones que hacen uso del protocolo UDP: una para realizar las comunicaciones (DatagramSocket) y otra para albergar los datos y direccin de destino (DatagramPacket), ambas en el paquete java.net. Antes de entrar en los detalles de programacin, vamos a mostrar grficamente el esquema bsico de establecimiento de comunicacin UDP.

1. El programa que proporciona el servicio (programa servidor) crea una instancia de la clase DatagramSocket, indicando el puerto asociado al servidor; DatagramSocket MiSocket = new DatagramSocket (4000); los datos recibidos; 2. El programa servidor crea una instancia de la clase DatagramPacket, donde se guardan DatagramPacket Paquete = new DatagramPacket(buffer, buffer.length); 3. El programa servidor invoca el metodo receive sobre el socket de tipo DatagramSocket. Este mtodo, por defecto, bloquea el programa hasta que llegan los datos: MiSocket.receive(Paquete); 4. El programa Cliente crea una instancia de tipo DatagramSocket: DatagramSocket MiSocket = new DatagramSocket(); datos, adems de la direccin y puerto de destino. InetAddress.getByName(localhost),4000); 6. El programa que utiliza el servicio(programa cliente) invoca el metodo send sobre el socket de tipo DatagramSocket: MiSocket.send(Paquete); 5. El programa cliente crea una instancia de tipo DatagramPacket, proporcionndole los DatagramPacket Paquete= new DatagramPacket (buffer, Mensaje.length(),

EJEMPLO Este es un ejemplo sencillo en el cual solo enviaremos un mensaje hola mundo

Marco Prctico UDPrecibe.java import java.net.*; public class UDPrecibe{ public static void main(String[] args){ try{ DatagramSocket MiSocket = new DatagramSocket(4000); byte[] buffer = new byte[15]; MiSocket.receive(Paquete); System.out.println(new String (Paquete.getData())); MiSocket.close(); } catch (Exception e){ } }} UDPenvia.java import java.net.*; public class UDPenvia{ public static void main(String[] args){ try { DatagramSocket MiSocket= new DatagramSocket(); byte[] buffer = new byte[15]; buffer = Mensaje.getBytes(); Mensaje.length(), InetAddress.getByName("localhost"),4000); MiSocket.send(Paquete); }catch (Exception exc){ } MiSocket.close(); System.out.println("Error"); } } DatagramPacket Paquete = new DatagramPacket(buffer, String Mensaje = "Hola Mundo"; DatagramPacket Paquete = new DatagramPacket (buffer, buffer.length);

System.out.println("Error");

Linkografias

http://www.chuidiang.com/java/sockets/udp/socket_udp.php http://nicolas055.tripod.com/filez/SocketsUDP.pdf http://www.ctr.unican.es/asignaturas/procodis_3_II/Doc/Procodis_6_01.pdf

Вам также может понравиться