2017-08-29 6 views

答えて

4

TIdTelnetIPVersionプロパティを持ちますが、protectedと宣言されているため、ユーザーコードで直接アクセスすることはできません。 IPVersionを設定するためには、例えば、ハッククラスを宣言することができます。

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; 

をIPv6ネットワーク上でアプリケーションをテストするには、ここで説明したように、IPv6アクセスポイントとしてお使いのMacを設定します。

Supporting IPv6 DNS64/NAT64 Networks

+2

'IPVersion'プロパティを明示的に公開する必要はありません。子孫クラスは 'protected'メンバーを継承し、クラスの宣言ユニットはそのクラスの' protected'メンバーに暗黙的にアクセスします。したがって、あなたの例では 'type TIdTelnetHack = class(TIdTelnet);'で十分です。 –

+1

Indyのissue trackerで[this ticket](https://github.com/IndySockets/Indy/issues/164)に投票してください。 –

関連する問題