Бессистемная потеря пакетов в мультикаст на Андроид?

Мне нужно обмениваться мультикаст-сообщениями между 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();
	}
}
  • Вопрос задан
  • 3471 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы