2010-07-15 6 views
0

Je cours du code sur le nexus un - et j'ai un problème très étrange. Le "serveur" envoie les paquets UDP sur le socket de multidiffusion auquel le téléphone est joint. Le téléphone reçoit et envoie des données au groupe de multidiffusion, mais il semble que le téléphone s'étouffe lorsqu'il reçoit un grand nombre de paquets en même temps.Problème avec les sockets de multidiffusion Android

Par exemple, le serveur envoie occasionnellement 80 paquets de 512 octets en une fois. Le téléphone commence à recevoir les paquets, mais alors au 31ème paquet (~ 16KB de données) la réception se bloque (indiquant qu'il n'y a plus rien sur le socket.) J'ai fait des tests wireshark et des trucs donc je suis sûr que les paquets ne sont pas perdus. Même si certains sont perdus, il est très étrange que chaque test produise le même résultat --- une grande quantité de données se coince sur le socket en même temps, mais le socket me permet seulement de socket.receive() pour une valeur de 16Ko de données.

J'ai essayé socket.setReceiveBufferSize() avec une variété de valeurs (jusqu'à 1 Mo) - mais cela ne semble pas fonctionner. Fait intéressant, un appel à getReceiveBufferSize() m'indique que le socket devrait contenir environ 100 Ko de données. Si je demande au serveur de ralentir sa méthode d'envoi (que je ne peux pas déployer, je ne peux le faire qu'à des fins de test) - tout fonctionne correctement, vraisemblablement parce que les paquets ne sont pas coincés sur la prise du téléphone temps (c'est-à-dire que je demande au serveur d'attendre une demi-seconde entre les paquets.)

Quelqu'un d'autre a-t-il déjà fait l'expérience - si oui, comment l'avez-vous contourné? I ne peut pas basculer l'application à TCP.

Merci!

Dan

PS. Le code Java fonctionne bien si je l'exécute sur une machine normale ...

Répondre

0

Nevermind - Je l'ai réparé en passant sur un réseau fermé où il n'y a aucune possibilité de perte et de choses étranges - je ne sais pas ce qui se passait avec le réseau que j'étais (qui était censé être goo) - mais au moins cela fonctionne!

Dan