Redes Sockets UDP Multipunto bajo Java Redes-Sockets 1 Sockets UDP multipunto Clase MulticastSocket (subclase de DatagramSocket) Para enviar mensajes multicast. Un mensaje multicast se envía a todos los miembros del grupo multicast. Un grupo multicast se especifica mediante una dirección de clase D (multicast) y un puerto. Direcciones de clase D: de 224.0.0.0 a 239.255.255.255 (224.0.0.0 esta reservada). Redes-Sockets 2 MulticastSocket Para unirse a un grupo multicast se debe crear primero un socket de tipo MulticastSocket en el puerto deseado e invocar después al método: joinGroup. Cuando un proceso envía un mensaje a un grupo multicast, recibirán el mensaje todos los procesos suscritos al grupo. Para recibir mensajes multicast es necesario pertenecer a un grupo, sin embargo, esto no es necesario para enviar mensajes al grupo. Un proceso puede abandonar el grupo mediante el método leaveGroup. Redes-Sockets 3 MulticastSocket:constructores MulticastSocket() Æ Crea un socket multicast MulticastSocket(int puerto)Æ Crea un socket multicast en el puerto especificado Excepciones: IOException y SecurityException Redes-Sockets 4 MulticastSocket: métodos void joinGroup(InetAddress dirMcast)Æ Se une a un grupo multicast. Void leaveGroup(InetAddress dirMcast)Æ Abandona un grupo multicast. void send(DatagramPacket p,byte ttl)Æ Envia un datagrama al destino con el TTL que se especifique (generalmente TTL=1) Redes-Sockets 5 MulticastSocket: Ejemplo Cada instancia crea un MulticastSocket asociado a la dirección 228.0.0.1 en el puerto 6789 para formar un grupo multicast. Inicialmente, un proceso envía el mensaje que recibe como parámetro (args[0]) y después espera la recepción de los mensajes multicast hasta que algún proceso envíe la palabra FIN. Redes-Sockets 6 MulticastSocket: Ejemplo import java.net.*; import java.io.*; // Se queda a la espera de mensajes al grupo, hasta recibir "Adios" while (true) { …………. …………. public class MiembroMulticast { public static void main(String args[]) { // args[0] es el mensaje enviado al grupo y args[1] es la direccion del grupo try { InetAddress grupo = InetAddress.getByName(args[1]); MulticastSocket socket = new MulticastSocket(6789); System.out.println("Recibido:" + linea); if (linea.equals("Adios")) break; } // Se une al grupo socket.joinGroup(grupo); // Envia el mensaje byte[] m = args[0].getBytes(); …………………………… byte[] bufer = new byte[1000]; String linea; } } // Si recibe "Adios" abandona el grupo socket.leaveGroup(grupo); } catch (SocketException e) { System.out.println("Socket:" + e.getMessage()); } catch (IOException e) { System.out.println("IO:" + e.getMessage()); } Redes-Sockets 7