Мне нужно обмениваться мультикаст-сообщениями между Android и Windows. Но имеется проблема: почему-то при попытке передать с Windows на Android пакеты часто теряются (навскидку процентов 60). Притом, если между двумя Windows устройствами (Win7 и XP) никаких проблем нет. И если передавать данные с Андроида на PC тоже все отлично работает. Получается, что проблема именно в приемнике на Android'е. Возникает в общем-то бессистемно: то один пакет прорвется, то сразу с десяток-полтора можно без проблем послать. В чем может быть дело?
Мой код на Android:
private void MulticastStart() {
try {
WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if(wifi!=null) {
MulticastLock multicastLock = wifi.createMulticastLock("MyApp");
multicastLock.acquire();
}
multicastGroupAddr=InetAddress.getByName("239.123.126.129");
multicastSocket = new MulticastSocket(PORT);
multicastSocket.joinGroup(multicastGroupAddr);
} catch (IOException e) {
e.printStackTrace();
}
}
public void MulticastHandler() {
Thread thread = new Thread() {
@Override
public void run() {
try {
while (true) {
byte[] buffer = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length);
multicastSocket.receive(datagramPacket);
String ip=datagramPacket.getAddress().getHostAddress();
String message=new String(buffer, 0, datagramPacket.getLength());
Log.d("MyApp", ip+": "+message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
thread.start();
}
public void MulticastStop() {
if(multicastLock!=null && multicastLock.isHeld()) multicastLock.release();
if(multicastSocket!=null && !multicastSocket.isClosed()) {
try {
multicastSocket.leaveGroup(multicastGroupAddr);
} catch (IOException e) {
e.printStackTrace();
}
multicastSocket.close();
}
}