Je tente de recevoir une diffusion UDP sous Mono pour Android et je ne vois aucune entrée de données. C'est assez perplexe car cela fonctionne bien sur les Galaxy Tab 7 et Galaxy Tab 10 (Android v 3.2) J'ai, mais échoue sur un HTC G2 (Android v2.3.4).UDPClient ne recevant pas les paquets sur HTC G2
Le code est simple:
public void BeginDiscover()
{
var packet = new DiscoverPacket();
lock (m_syncRoot)
{
var localEndpoint = new IPEndPoint(m_local, 0);
using (var udp = new UdpClient(localEndpoint))
{
var remoteEndpoint = new IPEndPoint(IPAddress.Broadcast, DiscoverPort);
udp.Send(packet.Data, packet.Data.Length, remoteEndpoint);
Thread.Sleep(100);
}
}
}
Je ai vérifié que le manifeste comprend cette ligne:
<uses-permission android:name="android.permission.INTERNET" />
Bien que cela se passe dans Debug, ce qui devrait être implicitement mis de toute façon.
Autres observations très étranges:
- Encore une fois, ce qui fonctionne très bien sur un autre type de dispositif
- Le gestionnaire d'écoute pour les diffusions UDP (dont la liste d'écoute de la réponse) -t voir cette sortant paquet. Le code de cet écouteur est aussi simple:
[code auditeur]
private void Start()
{
m_discoverListener = new UdpClient(DiscoverPort);
m_discoverListener.BeginReceive(DiscoverCallback, m_discoverListener);
}
private void DiscoverCallback(IAsyncResult result)
{
try
{
var ep = new IPEndPoint(IPAddress.Any, DiscoverPort);
var data = m_discoverListener.EndReceive(result, ref ep);
// filter out what we send
var add = AddressWithoutPort(ep.Address);
if (add == m_local.ToString()) return;
// parse discover response
// [clipped for clarity]
}
finally
{
m_discoverListener.BeginReceive(DiscoverCallback, m_discoverListener);
}
}
- Wireshark en cours d'exécution sur un PC séparé sur le même réseau -t voir le découvrir paquet de demande (ci-dessus)
- la « découverte » l'appareil est également le voir, parce que Wireshark voit aussi la réponse
- l'écouteur UDP appareil Android est non recevant le paquet de réponse
Les seules différences majeures entre les appareils que je peux penser (autres que les différents constructeurs mettant en œuvre la plate-forme) est que le G2 a une radio cellulaire intégré et la Galaxy Tab ne fonctionne pas. Dans mon cas de test spécifique, je n'ai pas de carte SIM dans le téléphone, donc aucune connexion cellulaire n'est en cours. Notez que le code ci-dessus utilise explicitement le point de terminaison local qui se trouve sur le réseau WiFi.
Y at-il un problème connu avec UDP sur le G2 spécifiquement ou généralement sur les anciennes implémentations de la plate-forme Android?
En fait, j'eu le même problème, je trouve que HTC ne recevra pas de paquet UDP à moins qu'il ne soit dirigé vers son adresse. –