Meine verteilte Anwendung, mit verschiedenen Hosts müssen lokale Server innerhalb des gleichen LAN finden.Wie zwischen zwei Prozess und zwei Hosts mit UDP-Datagramme auf Android kommunizieren
Ich hatte begrenzte Erfolgserkennung lokale Server mit NsdManager, das ist der Weg zu gehen, aber oft bleiben Server unerkannt. Ich suche nach einer besseren Lösung, etwas zuverlässiger.
Dann habe ich versucht, UDP-Pakete Multicasting, die ich habe kein Problem von innerhalb des gleichen Prozesses erkennen. (Mein Komponententest verwendet sowohl Client- als auch Serverinstanzen). Das funktioniert gut. Die gleichen Klassen erlauben es meinen Clients nicht, meine Server zu erkennen, die auf demselben Gerät laufen (Client und Server sind separate Prozessanwendungen).
Dann änderte ich meinen Ansatz mit Broadcast-Adressen, wiederum innerhalb desselben Prozesses, Unit Tests sind in Ordnung, aber in zwei verschiedenen Prozess, kein Server gefunden.
Wie gesagt, der Code funktioniert innerhalb desselben Prozesses, aber er funktioniert nicht, wenn er in zwei verschiedenen Prozessen oder auf zwei verschiedenen Client/Server-Hosts im selben LAN ausgeführt wird.
Hinweis: mein LAN ist ein High-End WiFi Rooter, keine speziellen Einstellungen.
Jeder hat eine Ahnung, was könnte das Problem sein?
Beachten Sie, dass mein Manifest diese Einstellungen für Client- und Server-Anwendungen umfasst:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
Beachten Sie, dass für meine Client den Server auf demselben Host-zu erkennen, ich bin schon TCP-Sockets verwenden, aber ich brauche um festzustellen, welcher Server in meinem LAN ist.
Das Problem ist in Ihrem Code. Bearbeiten Sie Ihr Q wr.t [mcve] (https://stackoverflow.com/help/mcve). UDP-Kommunikation kann nicht von irgendwelchen Prozessen abhängen. – Onik
Mein Code funktioniert gut, sowohl mit Multicast- als auch mit gesendeten UDP-Paketen, solange es sich innerhalb meiner Komponententests befindet, bei denen sowohl der Client als auch der Server innerhalb desselben Prozesses ausgeführt werden. Wenn zwei separate Client- und Serveranwendungen ausgeführt werden, also zwei getrennte Prozesse, kann mein Code keine Datagramme lesen. – Bamaco
Exact gleichen Code liest Datagramme gut, wenn Server und Client beide im selben Prozess leben. Das Problem tritt auf, wenn beide Anwendungen in separaten Hosts und Anwendungen ausgeführt werden. – Bamaco