Zajmuję się tworzeniem aplikacji do czatu, w której klienci Android będą wymieniać swoje IP za pomocą multiemisji (UDP).Urządzenie z Androidem nie otrzymuje pakietu multicastowego
Każde urządzenie wyśle swoje IP do wielu klientów (wszystkie urządzenia uruchamiające tę aplikację) w osobnym wątku. Pojawi się kolejny wątek odbiornika, który będzie nasłuchiwał tych pakietów multiemisji. Oto mój kod.
// Kod multiemisji.
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();
// Odbiornik kod
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();
Problemem jest każde urządzenie drukuje swój własny adres. Wydaje się, że nigdy nie słucha innych pakietów multicastowych (mam na myśli to, że powinien również drukować inne ip). Dostaję również dziennik poniżej, nie wiem, czy to jest powiązane.
11-04 23:56:17.985: I/OSNetworkSystem(603): mcastAddDropMembership interfaceIndex=0
Każda pomoc zostanie doceniona.
Wygląda na to tylko dla pakietów multicast wifi. Korzystam z multiemisji przez Internet (przy użyciu zwykłego APN, bez WIFI). Czy nadal będzie działać? –
Nie sądzę, że jest to możliwe na Androidzie, zobacz, czy odpowiedź [tutaj] (http://stackoverflow.com/questions/3068497/udp-multicast-over-the-internet) pomaga. – yorkw
Dzięki, że popatrzę. –