2010-12-09 21 views

Respuesta

14

Envío de datagramas de multidifusión

Con el fin de enviar cualquier tipo de datagrama en Java, ya sea unicast, broadcast o multicast, se necesita un java.net.DatagramSocket:

DatagramSocket socket = new DatagramSocket(); 

Uno puede suministrar opcionalmente un local de puerto al constructor DatagramSocket al que el socket debe enlazar. Esto solo es necesario si uno necesita que otras partes puedan comunicarse con nosotros en un puerto específico. Un tercer constructor toma el puerto local Y la dirección IP local a la que enlazar. Esto se usa (raramente) con hosts multi-hogar donde es importante en qué adaptador de red se recibe el tráfico.

DatagramSocket socket = new DatagramSocket(); 

byte[] b = new byte[DGRAM_LENGTH]; 
DatagramPacket dgram; 

dgram = new DatagramPacket(b, b.length, 
    InetAddress.getByName(MCAST_ADDR), DEST_PORT); 

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

Recepción de datagramas de multidifusión

se puede utilizar un DatagramSocket normales para enviar y recibir datagramas unicast y broadcast y multicast para enviar datagramas. Sin embargo, para recibir datagramas de multidifusión, se necesita un MulticastSocket. La razón de esto es simple, se necesita realizar trabajo adicional para controlar y recibir tráfico de multidifusión por todas las capas de protocolo debajo de UDP.

byte[] b = new byte[BUFFER_LENGTH]; 
DatagramPacket dgram = new DatagramPacket(b, b.length); 
MulticastSocket socket = 
    new MulticastSocket(DEST_PORT); // must bind receive side 
socket.joinGroup(InetAddress.getByName(MCAST_ADDR)); 

while(true) { 
    socket.receive(dgram); // blocks until a datagram is received 
    System.err.println("Received " + dgram.getLength() + 
    " bytes from " + dgram.getAddress()); 
    dgram.setLength(b.length); // must reset length field! 
} 

Para más información:

+0

¿Es posible que cada cliente pueda enviar y recibir en un grupo de transmisión? (define 2 socket como DatagramSocket para enviar y MulticastSocket para recibir) – Razavi

1

Tienes que volver al frente. Usted recibe multidifusiones a través de un MulticastSocket pero no necesita enviarlas de esa manera: puede enviarlas a través de un DatagramSocket.

Ver el Java Tutorial, Custom Networking trail.

+0

No estoy seguro de cuán cierto es el comentario anterior. No pude enviar el paquete de multidifusión a través de un DatagramSocket normal. Solo cuando comencé a usar un MulticastSocket en el lado del servidor, comenzó a mostrarme el tráfico saliente al olfatear los paquetes en el extremo del servidor. –

Cuestiones relacionadas