1つのマルチキャストグループとポートからパケットをキャプチャしたい。まず、tcpdumpコマンドを使用して、データがキャプチャされるかどうかを確認しました。Java Multicast receiver not working
コマンド -
tcpdump -i <interface name> dst <multicast ip>
私はこのマルチキャストグループに参加するJavaで一つのプログラムを作成し、コンソール上のデータを印刷します。
レシーバ -
public class MulticastClient {
public static void main(String args[]) throws IOException {
MulticastSocket socket = new MulticastSocket(<port number here>);
//socket.setInterface(InetAddress.getByName("<local interface ip address>")); // This line makes sense or not...don't know
socket.joinGroup(InetAddress.getByName("<multicast ip here>"));
while (true) {
byte ab[] = new byte[583];
DatagramPacket packet = new DatagramPacket(ab, ab.length);
socket.receive(packet);
System.out.println("Got packet " + Arrays.toString(ab));
}
}
}
このプログラムは、所与のマルチキャスト・グループとポートからのパケットをキャプチャすることができません。
テストのために、1つのマルチキャストグループとポートでデータを送信する1つのMulticastSockerServerを作成しました。
送信者 -
public class MulticastServer {
public static void main(String[] args) throws Exception {
final InetAddress group = InetAddress.getByName("<multicast group ip>");
final int port = <port number>;
try {
MulticastSocket socket = new MulticastSocket(9000);
//socket.setInterface(InetAddress.getByName("<local interface ip address>"));
socket.joinGroup(group);
byte[] bt = new byte[100];
byte index = 0;
while (true) {
Arrays.fill(bt, (byte) index++);
socket.send(new DatagramPacket(bt, 100, group, port));
System.out.println("sent 100 bytes");
Thread.sleep(1 * 1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
私は、この2つのプログラムを実行すると、それは私が期待どおりに動作、データを受信機側でキャプチャされます。受信者だけが異なるマルチキャストグループのIPとポートからデータをキャプチャできないのはなぜですか?
任意の提案は充当されます。
tcpdump呼び出し - 基本的には、実際にマルチキャストサーバーに接続できることを確認するためにJavaコードを実行しているシステムで実験しましたか?たとえば、ファイアウォールによってブロックされないようにするには? – GhostCat
@ GhostCat-私は既にファイアウォールの状態についてチェックしていて、現在実行中ではありません。私のJavaの送信者と受信機は正常に動作しますが、サーバからのデータをキャプチャできません。マルチキャストグループipとポート – kit
JavaクライアントはUDPマルチキャストデータグラムだけを表示しますが、tcpdumpコマンドはUDP以外のあらゆる種類のマルチキャストデータグラムを表示します。ローカルネットワークにUDPマルチキャストデータグラムがありますか?別の質問:あなたのホストに複数のインターフェースがありますか? –