2017-08-29 5 views

Répondre

4

TIdTelnet a une propriété IPVersion, mais il est déclaré protected et n'est donc pas accessible directement par le code utilisateur. Pour régler le IPVersion, vous pouvez déclarer une classe de hack, par exemple:

uses 
    .., IdStack, IdGlobal, .. 

type 
    TIdTelnetHack = class(TIdTelnet) 
    published 
    property IPVersion; //expose protected property 
    end; 

procedure TForm1.TelnetConnect(const aHost:String); 
var 
    aIPVersion: TIdIPVersion; 
begin 
    if not IdTelnet1.Connected then 
    begin //not connected. go connect 
    // check if ipv6 or ipv4 network, and support both, 
    try 
     GStack.ResolveHost(aHost, Id_IPv6); 
     aIPVersion := Id_IPV6; 
    except 
     GStack.ResolveHost(aHost, Id_IPv4); 
     aIPVersion := Id_IPV4; 
    end; 

    IdTelnet1.Host := aHost; 
    IdTelnet1.Port := 8090; 
    TIdTelnetHack(IdTelnet1).IPVersion := aIPVersion; //set to IPv4 or IPv6 

    IdTelnet1.Connect; 
    end; 
end; 

Pour tester votre application sur un réseau IPv6, définissez votre Mac comme un point d'accès IPv6, comme expliqué ici:

Supporting IPv6 DNS64/NAT64 Networks

+2

Vous n'avez pas besoin de publier explicitement la propriété 'IPVersion'. Une classe descendante hérite des membres 'protected', et l'unité déclarante de la classe a un accès implicite aux membres' protected' de la classe. Donc, 'tapez TIdTelnetHack = class (TIdTelnet);' suffira dans votre exemple. –

+1

Assurez-vous de voter pour [ce ticket] (https://github.com/IndySockets/Indy/issues/164) dans le suivi des problèmes d'Indy. –