Android NSD lange Wartezeiten

  • Hallo zusammen,


    Bei der Implementierung von Android's offizieller Network Service Discovery habe ich zwei unschöne Nebeneffekte:


    1) OnServiceLost() wird nie gerufen. Ich kann den gefundenen Drucker abstecken oder auch das gefundene iPhone aus dem WLAN entfernen, es ändert leider nichts.


    2) OnServiceFound() benötigt bis zu 30 Sekunden, um zu antworten, manchmal genügen auch weniger als eine.


    Nun zu der Frage: fehlt etwas bei der offiziellen Android Dokumentation, wodurch es diese unschönen Effekte hat.


    Wenn nicht habe ich mich auch schon mit Alternativen beschäftigt, wie beispielsweise RxNDSSD(hoffe das ist richtig, bin leider im Zug, wenn ich das tippe).


    Jedoch kenne ich mich mit nativer Einbindung von C++(also die Bonjourfiles von Apple nicht aus). Kennt jemand noch Alternativen oder Ansätze? Danke :3

  • Hallo
    Frage hast du dich den auch mit dem Drucker verbunden. Wenn du ihn nur gesehen hast. Aber nicht verbunden woher soll denn dann die lost Methode wissen worauf sie reagieren soll. Dann müsste die Methode at alle Geräte die mal sichtbar waren und wieder weg sind reagieren. Dazu müsste sich Android alle Geräte merken das ist schon etwas viel verlangt und du würdest nicht von welchen Gerät die Nachricht kommt.

  • Hallo jogimuc,


    Nein, ich habe den Service nicht resolved, sondern durch

    Java
    "_services._dns-sd._udp."

    lediglich alle Services mir anzeigen lassen.


    Da der Listener jedoch eine solche Methode implementiert hat und auch aus der Dokumentation nicht ersichtlich wird, dass man einen Service resolven muss, um ihn zu verlieren, empfinde ich das nicht als zu viel verlangt.
    Außerdem zeigt das Diagramm(siehe Link) sogar ein add to und remove from list.


    Dennoch wäre das ja kein Problem das selbst zu implementieren, aber ich verstehe nicht, wieso die Antwortzeit manchmal so unfassbar lange braucht:

  • Ich hab den Quellcode mal sauber rausgeschrieben. Orientiert habe ich mich hier.


    Die Antwortzeit beträgt zwischen Start der Discovery und Found eines Services bis zu 40 Sekunden.


  • Hallo was mir als erstes in deinem Code auffällt ist das du in der Methode Start, die Methode discoverServices aufrufst, und dort als erstes stopDiscovery.
    Somit beendest du den Service ja auch gleich wieder.


    Auch kann ich kein NsdServiceInfo Objekt erkenn wo du festlegst auf welchen Service du wartest.
    Auch resolvst du den Service nicht wenn ihn onServiceFound gefunden hast. Schaue dir doch mal dein eigenes gefundenes Beispiel genauer an und versuch auch da nachzuvollziehen in welcher Reihenfolge die Methoden aufgerufen werden.


    Ps. Hier noch ein Link
    https://jayrambhia.com/blog/android-wireless-connection-1


    Mir scheint du willst den Code für den Server als Client benutzen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!