Android クライアントがマルチキャスト (UDP) を使用して IP を交換するチャット アプリケーションを開発しています。
すべてのデバイスは、1 つの個別のスレッドで複数のクライアント (このアプリを実行しているすべてのデバイス) にその IP を送信します。これらのマルチキャスト パケットをリッスンする別のレシーバ スレッドがあります。これが私のコードです。
//マルチキャスト コード。
DatagramSocket socket = new DatagramSocket(9898);
byte buff[] = ip.getBytes();
DatagramPacket packet = new DatagramPacket(buff, buff.length, InetAddress.getByName("224.0.0.1"),9999);
socket.send(packet);
socket.close();
//受信者コード
MulticastSocket socket = new MulticastSocket(9999);
InetAddress group = InetAddress.getByName("224.0.0.1");
socket.joinGroup(group);
DatagramPacket packet;
byte[] buf = new byte[256];
byte b = 'x'; //just a separator for time being
Arrays.fill(buf,b);
packet = new DatagramPacket(buf, buf.length);
String received= "";
while(received!=null)
{
socket.receive(packet);
received = new String(packet.getData());
received = received.substring(0,received.indexOf('x'));
this.setIp(received);
System.out.println("Address: " + received);
}
socket.leaveGroup(group);
socket.close();
問題は、すべてのデバイスが独自のアドレスを出力することです。他のマルチキャストパッケージをリッスンしないようです(つまり、他のIPも出力する必要があります)。以下のログも取得しますが、それが関連しているかどうかはわかりません。
11-04 23:56:17.985: I/OSNetworkSystem(603): mcastAddDropMembership interfaceIndex=0
どんな助けでも大歓迎です。