Multicast en Java (III) - Cliente Multicast

En la entrada anterior Multicast en Java (II) vimos un ejemplo de servidor multicast, vamos a ver ahora un cliente que sea capaz de "consumir" los datos que recibe del servidor. Recordemos el escenario: tenemos un servidor multicast que no es más que una aplicación que está enviando datos a través de una dirección de red de clase D  (multicast) por un puerto específico. 

Lo que vamos a hacer es crear un cliente que sea capaz de suscribirse a la dirección multicast en el puerto específico para recibir todo lo que emita el servidor. De forma que nuestro cliente siempre está "escuchando" al servidor multicast. Esto es útil en un entorno cliente-servidor en el que queremos que los clientes reciban los mismos datos, al mismo tiempo y de una vez, evitando enviarle datos a cada uno de los clientes.

Ejemplo de cliente

/**
* @author Antonio Bellido
*/
import java.io.*;
import java.net.*;

//Para probarlo, lanzar el MCServer y despues crear tantas 
//instancias de este como se quiera, espera a que haga el 
//join al grupo tarda unos segundos, y comienza a escribir 
//en la instancia del servidor (lo escrito saldrá en todos 
//estos clientes creados).

public class MCClient
{
public static void main (String [] args) throws IOException
{

//Creamos un socket multicast en el puerto 10000:
MulticastSocket s = new MulticastSocket (10000);

//Configuramos el grupo (IP) a la que nos conectaremos:
InetAddress group = InetAddress.getByName ("231.0.0.1");

//Nos unimos al grupo:
s.joinGroup (group);

//Leemos los paquetes enviados por el servidor multicast:
String salida = new String();
while(!salida.equals("salir"))
{

// Los paquetes enviados son de 256 bytes de maximo 
//(es adaptable)
byte [] buffer = new byte [256];

//Creamos el datagrama en el que recibiremos el paquete 
//del socket:
DatagramPacket dgp = new DatagramPacket (buffer, buffer.length);

// Recibimos el paquete del socket:
s.receive (dgp);

// Adaptamos la información al tamaño de lo que se envió 
//(por si se envió menos de 256):
byte [] buffer2 = new byte [dgp.getLength ()];

// Copiamos los datos en el nuevo array de tamaño adecuado:
System.arraycopy (dgp.getData (),
0,
buffer2,
0,
dgp.getLength ());

//Vemos los datos recibidos por pantalla:
salida = new String (buffer2);
System.out.println (salida);

}

//Salimos del grupo multicast
s.leaveGroup (group);

// Cerramos el socket:
s.close ();

}

}

Share:
spacer

2 comentarios:

  1. Hola, es muy bueno tu trabajo, pero no entiendo como ejecutar el mcserver y el mcclient, a que te refieres con el join?

    ResponderEliminar