Java Multicast Sending Data, Not Receiving

Я пишу класс на Java, который используется для значительного упрощения процесса многоадресной рассылки.Однако у меня с ним две большие проблемы:

  1. Класс отправляет данные (я могу проверить это с помощью моего сетевого монитора Wireshark), но данные не принимаются другими в той же группе.
  2. На некоторых машинах TTL отправляемого пакета превышен при передаче (опять же, согласно Wireshark).

Кто-нибудь может мне помочь? Я часами пытался и искал ответы, и, похоже, мой код следует всем основным процедурам для подключения, присоединения, отправки и получения данных от хоста многоадресной рассылки.

Вот фрагмент соответствующих частей класса:

Класс многоадресной передачи:

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

Пример использования для отправки данных:

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

Пример использования для получения данных:

Multicaster multicast = new Multicaster("239.0.0.0");

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

multicast.joinGroup();
System.out.print(multicast.recieveData());
6
задан Benjamin 25 December 2013 в 20:01
поделиться