2011-12-12 18 views
5

Estoy escribiendo una clase en Java que se utiliza para simplificar en gran medida el proceso de multidifusión. Sin embargo, estoy teniendo dos grandes problemas con él:Java Multicast Envío de datos, no recibido

  1. La clase envía datos (puedo verificar esto con mi monitor de red, Wireshark), pero los datos no se recibe por cualquier otros en el mismo grupo.
  2. En algunas máquinas, el paquete de envío TTL se excede en tránsito (de nuevo, según Wireshark).

¿Alguien podría ayudarme? He estado buscando y buscando respuestas durante horas, y parece que mi código sigue todos los procedimientos básicos para conectarse, unirse, enviar y recibir datos desde un host de multidifusión.

Aquí es un fragmento de las partes pertinentes de la clase: clase

multicaster: Uso

public class Multicaster { 
    public int port = 5540; 

    protected String IPAddress; 

    private MulticastSocket msConn; 
    private InetAddress netAddr; 

    public Multicaster(String IPAddress) { 
    this.IPAddress = IPAddress; 
    } 

    public String recieveData() { 
    byte[] buf = new byte[1000]; 
    DatagramPacket pack = new DatagramPacket(buf, buf.length); 

    try { 
     this.msConn.receive(pack); 
     new Message(pack); 
     String out = new String(pack.getData()); 
     return out.substring(0, pack.getLength()); 
    } catch (IOException e) { 
     return new String(""); 
    } 
    } 

    public void joinGroup() { 
    try { 
     this.msConn.joinGroup(this.netAddr); 
    } catch (IOException e) { 
    //This error shouldn't occur since it would caught by the connect() method during initial connection to the host 
    } 
    } 

    public void connect() throws MulticasterInitException { 
    //Try to create a multicast connection on the given IP address and port 
    try { 
     try { 
     //Create a multicast connection on a given port, throws UnknownHostException 
     this.msConn = new MulticastSocket(this.port); 

     //If all goes well, then create a connection to a given IP address using the above port number, throws IOException and SecurityException 
     this.netAddr = InetAddress.getByName(this.IPAddress); 
     } 
    } 

    /** 
    * Here all of the possible exceptions that are thrown above 
    * are caught and handled here. This works just fine. 
    */ 
    } 

    public void sendData(String data) throws MulticasterSendException { 
    DatagramPacket packet = new DatagramPacket(data.getBytes(), data.length(), this.netAddr, this.port); 

    try { 
     this.msConn.send(packet); 
    } catch (IOException e) { 
     throw new MulticasterSendException("Java could not communicate with the server. Please check your network connections.", e); 
    } 
    } 
} 

de muestra para enviar datos:

Multicaster multicast = new Multicaster("239.0.0.0"); 

try { 
    multicast.connect(); 
} catch (MulticasterInitException e) { 
    //Handle exception... 
} 

multicast.joinGroup(); 

try { 
    multicast.sendData("Hi"); 
} catch (MulticasterSendException e) { 
    //Handle exception... 
} 

Ejemplo de uso para recibir datos:

Multicaster multicast = new Multicaster("239.0.0.0"); 

try { 
    multicast.connect(); 
} catch (MulticasterInitException e) { 
    //Handle exception... 
} 

multicast.joinGroup(); 
System.out.print(multicast.recieveData()); 
+0

Puede consultar mis comentarios ya que el problema está relacionado con [http://stackoverflow.com/questions/8471447/java-multicast-sample-program-is-unable-to- delivery-packets-within-lan- across-ho] (http://stackoverflow.com/questions/8471447/java-multicast-sample-program-is-unable-to-idiver-packets-within-lan-across-ho) – ecle

Respuesta

6

Me he encontrado con problemas similares antes y tuve que asegurarme de que NetworkInterface se haya especificado en el lado de recepción.

SocketAddress socketAddress = new SocketAddress(groupIp, groupPort); 
NetworkInterface networkInterface = NetworkInterface.getByName(interfaceName); 

socket.joinGroup(socketAddress, networkInterface); 

Dónde interfaceName es uno de los nombres de interfaz que se muestran cuando se ejecuta ifconfig en Linux o Mac.

+0

¿Puede darme alguna sugerencia? sobre https://stackoverflow.com/questions/45162552/multicast-receiver-unable-to-capture-the-data mi problema? – kit

Cuestiones relacionadas