2011-12-12 31 views
5

Çok noktaya yayın işlemlerini büyük ölçüde basitleştirmek için Java'da bir sınıf yazıyorum. Ancak, onunla iki büyük sorun yaşıyorum:Java Çok Noktaya Yayın Veri Gönderme, Alınıyor

  1. sınıf veri gönderir ancak veri aynı gruptaki herhangi başkaları tarafından alınmazsa (benim net monitör, Wireshark da sahibiz).
  2. Bazı makinelerde, gönderim paketi TTL geçiş sırasında aşıyor (tekrar Wireshark'a göre).

Lütfen bana yardımcı olabilir misiniz? Saatlerce cevap aramaya ve aramaya çalışıyorum ve kodumun çok noktaya yayın sunucusundan veriye bağlanmak, katılmak, göndermek ve almak için gereken tüm temel prosedürleri izlediği anlaşılıyor.

Multicaster sınıfı:

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... 
} 

Numune kullanımını:

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); 
    } 
    } 
} 

Numune kullanım verileri göndermek için Buraya

sınıfın ilgili kısımlarının snippet'idir veri almak için:

Multicaster multicast = new Multicaster("239.0.0.0"); 

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

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

[http://stackoverflow.com/questions/8471447/java-multicast-sample-program-is-unable-to-deliver-packets-within-lan- ilgili olduğu için yorumlarıma bakabilirsiniz. karşıdan karşıya] (http://stackoverflow.com/questions/8471447/java-multicast-sample-program-is-unable-to-deliver-packets-within-lan-across-ho) – ecle

cevap

6

Daha önce benzer sorunlarla karşılaştım ve NetworkInterface'in alıcı tarafında belirtildiğinden emin olmalıydım. interfaceName Linux veya Mac üzerinde ifconfig çalıştırırken gösterilen arabirim adlarından biridir

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

socket.joinGroup(socketAddress, networkInterface); 

.

+0

Bana öneri verebilir misiniz? https://stackoverflow.com/questions/45162552/multicast-receiver-unable-to-capture-the-data sorunum hakkında? – kit

İlgili konular