Einzelnen Beitrag anzeigen

weisswe
(Gast)

n/a Beiträge
 
#1

App Tethering - DiscoverManagers(Target) - Multicast

  Alt 28. Dez 2017, 11:08
Hello!

Ich gebe App Tethering eine neue Change und wollte eine kleine einfache Test-App erstellen.
Hat auch funktioniert - unter speziellen Voraussetzungen.
1. AllowedAdapters: Network_V4
2. DiscoverManagers funktioniert nur OHNE Target Wert

Und nun zu Punkt 2:
Hier steht in der Doku das man eine spezielle IP bzw. Maske hinterlegen kann.
In meinem Fall wäre der Server auf 192.168.1.54 (auch in der Doku ist eine solche IP angegeben - siehe nachfolgend).
Code:
Original Delphi Tokyo Doku:
http://docwiki.embarcadero.com/Libraries/Tokyo/de/System.Tether.NetworkAdapter.TTetheringNetworkAdapterCommon.DoDiscoverManagers
Standardmäßig führt der Manager die Suche im Subnetz des LAN (Local Area Network) durch, in dem sich das Gerät mit Ihrer Anwendung befindet.
Verwenden Sie den Parameter ATargetList, um eine Liste mit einer oder mehreren IP-Adressen oder Subnetzen anzugeben, in denen Sie Remote-Manager ermitteln möchten. Um ein Subnetz zu definieren, geben Sie eine IP-Adresse mit 0 als vierter Nummer an. "192.168.4.0" bezeichnet beispielsweise das Subnetz 192.168.4.x.
Hinweis: Sie können keine umfassenderen Subnetze angeben. "192.168.0.0" wird beispielsweise nicht unterstützt.
Also have ich diese Aufrufe versucht:
- DiscoverManagers('192.168.1.54'); -> kein Server gefunden!
- DiscoverManagers('192.168.1.0'); -> wieder kein Server gefunden!

Fehlermeldung beim Debuggen: Die übermittelte IP-Adresse ist keine gültige Multicast-Adresse!

Ok, aha - interessant.
Dann hab ich im Indy Code etwas gefunden:
Delphi-Quellcode:
//for IPv4 Multicast address chacking
const
  IPv4MCastLo = 224;
  IPv4MCastHi = 239;

function TIdStack.IsValidIPv4MulticastGroup(const Value: string): Boolean;
var
  LIP: string;
  LVal: Integer;
begin
  Result := False;
  if IsIP(Value) then
  begin
    LIP := Value;
    LVal := IndyStrToInt(Fetch(LIP, '.')); {Do not Localize}
    Result := (LVal >= IPv4MCastLo) and (LVal <= IPv4MCastHi);
  end;
end;
Dieser Check verursacht das Problem - nur IPs die zwischen 224.0.0.0 und 239.0.0.0 sind werden akzeptiert!??
Warum?

Jemand eine Idee?
  Mit Zitat antworten Zitat