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?