【问题标题】:Using Indy IdTelnet on ipv6 only network在仅 ipv6 的网络上使用 Indy IdTelnet
【发布时间】:2018-02-07 07:02:02
【问题描述】:

Apple App Store 要求应用程序只能在 ipv6 网络上运行。 如何让 IdTelnet 在这样的网络上工作?

【问题讨论】:

    标签: delphi firemonkey indy


    【解决方案1】:

    TIdTelnet 有一个IPVersion 属性,但它被声明为protected,因此不能由用户代码直接访问。为了设置IPVersion,你可以声明一个hack类,例如:

    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 网络上测试您的应用,请将您的 Mac 设置为 IPv6 接入点,如下所述:

    Supporting IPv6 DNS64/NAT64 Networks

    【讨论】:

    • 您不需要明确发布IPVersion 属性。后代类继承protected 成员,并且该类的声明单元隐式访问该类的protected 成员。因此,type TIdTelnetHack = class(TIdTelnet); 在您的示例中就足够了。
    • 请务必在 Indy 的问题跟踪器中为 this ticket 投票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2023-03-08
    • 2010-10-08
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 2016-10-14
    相关资源
    最近更新 更多