Я пытаюсь сделать многоадресную рассылку в android. У меня есть три телефона (все Galaxy S5). На одном телефоне включен Wi-Fi-модем и действует как AP (мобильные данные отключены). Из двух других телефонов один передает на многоадресный адрес, который получает другой, причем оба подключены к AP первого телефона. Передающий и принимающий телефон поддерживаются бок о бок. я обнаружил, что 1000 пакетов, которые я посылаю, я получаю только около 200. Ниже приведено краткое описание того, как я посылаюAndroid multicast высокой потери пакетов
MulticastSocket mMulticastSocket = new MulticastSocket(port);
InetAddress multicastGrp = InetAddress.getByName("239.255.255.250");
mMulticastSocket.joinGroup(multicastGrp);
String sendStr = "";
int packetSize = 1400;
for(int i = 0; i < packetSize; i++)
sendStr = sendStr+"a";
for(int i = 0; i < 1000; i++)
mMulticastSocket.send(new DatagramPacket(sendStr.getBytes(), sendStr.getBytes().length, mMulticastSocket, port);
Получите это что-то вроде,
//acquire multicast lock
byte[] buffer = new buffer[2048];
DatagramPacket rPack = new DatagramPacket(buffer, buffer.length);
mMulticastSocket.setReceiveBufferSize(1024*64);
int recvCount = 0;
while(true) {
mMulticastSocket.receive(rPack);
recvCount++;
}
//release multicast lock
Как отправить и получение производится в рабочих потоках. Я также обнаружил, что по мере уменьшения значения «packetSize» количество полученных пакетов увеличивается. Я предполагаю, что это связано с загрузкой процессора или буфером приема, но в любом случае я хочу многоадресные пакеты размером 1400 байт и получать как можно больше (я знаю, что количество принятых пакетов является функцией канала между двумя телефонами но я думаю, что держать их бок о бок - это самый лучший канал, который можно получить). Кроме того, когда я выполняю одноадресную рассылку UDP, я могу получить около 900 из 1000 отправленных пакетов. Я не могу понять, почему количество принятых пакетов настолько мало для многоадресной рассылки. Что мне не хватает?
Вы разблокируете WifiManager.MulticastLock? http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html также см. это: http://stackoverflow.com/questions/11634942/android-multicast-is-only-working-using -255-255-255-255-адрес – anil