jueves, 6 de diciembre de 2012

Socket Multicast

1.1.1.        ¿Que es un socket multicast?
A veces nos interesa que un ordenador pueda enviar un mensaje por red y que este sea recibido por otros ordenadores simultáneamente. Para ello están las direcciones multicast. Son direcciones en el rango 224.0.0.0 a 239.255.255.255. La 224.0.0.0 está reservada y no puede usarse. Enviando mensajes por estas direcciones, cualquier otro ordenador en la red que las escuche podría leer dicho mensaje, independientemente de cual sea la IP real de ese ordenador. Es decir, si un ordenador quiere enviar un mensaje simultáneamente a varios, puede hacerlo enviando el mensaje a una de estas IPs, los demás ordenadores deben estar a la escucha de dichas IPs para recibir el mensaje.

1.1.2.        Enviar un mensaje Multicast

public class MulticastServer {

     public static void main(String[] args) throws InterruptedException, IOException {
        try {

                MulticastSocket socket = new MulticastSocket();


                byte[] b = "Martin Gigena".getBytes();
                DatagramPacket dgram;

                dgram = new DatagramPacket(b, b.length,InetAddress.getByName("235.1.1.1"), 4000);

                System.err.println("Enviando " + b.length + " bytes a " +
                  dgram.getAddress() + ':' + dgram.getPort());
                while(true) {
                  System.err.print(".");
                  socket.send(dgram);
                  Thread.sleep(1000);
                }

        } catch (SocketException ex) {
            Logger.getLogger(UDPServer.class.getName()).log(Level.SEVERE, null, ex);
        }  catch (UnknownHostException ex) {
                Logger.getLogger(UDPServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

1.1.3.        Leer un mensaje Multicast

public class MulticastClient {


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

    try {
                byte[] b = new byte[100];
                DatagramPacket dgram = new DatagramPacket(b, b.length);
                MulticastSocket socket = new MulticastSocket(4000);
                socket.joinGroup(InetAddress.getByName("235.1.1.1"));

                while(true) {
                  socket.receive(dgram); // Se bloquea hasta que llegue un datagrama
                  System.err.println("Recivido " + dgram.getLength() +
                    " bytes de " + dgram.getAddress() + " "+ new String(dgram.getData()));
            
                }

        } catch (SocketException ex) {
            Logger.getLogger(UDPServer.class.getName()).log(Level.SEVERE, null, ex);
        }  catch (UnknownHostException ex) {
                Logger.getLogger(UDPServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

1 comentario: