2012-02-05 12 views
4

私のクラス用のピア2ピア・アプリケーションを開発しています。私は、サーバにUDPポート1110へのマルチキャストとUDPポート1110のマルチキャストが必要なことを発見させました。これを行うためのコードは以下のようになります。テストのために、私は送信と受信の両方の2つのサーバーを実行します。しかし、何も働いていないようです。私の問題はどこにあると思いますか?Javaでのマルチキャストが機能しない

2つのサーバーを2つの異なるフォルダに配置しました。このように私のNICにIPアドレスを割り当てましたifconfig eth0:3 192.168.0.11 netmask 255.255.255.0 up新しいIPアドレスについて各サーバにどのように伝えるべきですか?

BroadcastListner

class BroadcastListner implements Callable<Object> { 
    int PORT = 1110; 
    String IP = "255.255.255.255"; 
    MulticastSocket socket ; 
    DatagramPacket packet; 
    InetAddress IPAD; 
    byte data[] = null ; //////////////change size 
    int numOfNodes; 

    BroadcastListner(String IP, int numOfNodes) { 
     try { 
      this.numOfNodes = numOfNodes; 
     this.IP = IP; 
     IPAD = InetAddress.getByName(IP); 
     socket = new MulticastSocket(PORT); 
     packet = new DatagramPacket(data,data.length); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    BroadcastListner(int numOfNodes) { 
     try{ 
      this.numOfNodes = numOfNodes; 
      // this.IP = IP; 
      IPAD = InetAddress.getByName(IP); 
      socket = new MulticastSocket(PORT); 
      packet = new DatagramPacket(data,data.length); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public String call() { 
     try{ 
      socket.joinGroup(IPAD); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return ""; 
     } 

     while(true) { 
      try { 
       socket.receive(packet); 
       String str = new String(packet.getData()); 
       System.out.println(" Time signal received from"+ 
       packet.getAddress() + " Time is : " +str); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       return ""; 
      } 
     } 

     //socket.leaveGroup(IPAD); 
     //socket.close(); 
     //return ""; 
    } 
} 

BroadcastSender

class BroadcastSender implements Callable<Object> { 
    int PORT = 1110; 
    String IP = "255.255.255.255"; 
    MulticastSocket socket; 
    DatagramPacket packet; 
    InetAddress IPAD; 
    byte[] data = "IAmAServer".getBytes(); 
    //int numOfNodes; 
    String str = "IAmAServer"; 

    BroadcastSender(String IP) { 
     try { 
      // this.numOfNodes = numOfNodes; 
      this.IP = IP; 
      IPAD = InetAddress.getByName(IP); 
      socket = new MulticastSocket(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    BroadcastSender() { 
     try{ 
      // this.numOfNodes = numOfNodes; 
      // this.IP = IP; 
      IPAD = InetAddress.getByName(IP); 
      socket = new MulticastSocket(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public String call() { 
     try { 
      socket.joinGroup(IPAD); 
      socket.setTimeToLive(10); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return ""; 
     } 

     while(true) { 
      try { 
       Thread.sleep(2000); 
       packet = new DatagramPacket (data,str.length(),IPAD,PORT); 
       socket.send(packet); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       return ""; 
      } 
     } 
     //return ""; 
    } 
} 
+0

他の問題がある場合は特定できませんが、あなたのIPは間違っていると思います。マルチキャスト用に予約されたアドレスの範囲があります。あなたはそれらの1つを選ぶ必要があります。たとえば、224.x.x.xです。 – Kevin

+0

@Kevinが投稿した内容を繰り返し記入するには、ネットワークマスクをIPアドレスとして使用しないでください。 – Perception

答えて

0

あなたは192.168.0.255

代替のブロードキャストアドレスを試してみる必要があるマルチキャストの代わりに使用することです特定のサブネットに結び付けられていない224.xxxのようなブロードキャストアドレス。

+0

以前はブロードキャストアドレスを使用していませんでした。それはマルチキャストアドレスを使用するのと同じですか、それとも192.168.0.xサブネットに制限されていますか? – Kevin