【发布时间】:2018-02-07 07:02:02
【问题描述】:
Apple App Store 要求应用程序只能在 ipv6 网络上运行。 如何让 IdTelnet 在这样的网络上工作?
【问题讨论】:
标签: delphi firemonkey indy
Apple App Store 要求应用程序只能在 ipv6 网络上运行。 如何让 IdTelnet 在这样的网络上工作?
【问题讨论】:
标签: delphi firemonkey indy
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 接入点,如下所述:
【讨论】:
IPVersion 属性。后代类继承protected 成员,并且该类的声明单元隐式访问该类的protected 成员。因此,type TIdTelnetHack = class(TIdTelnet); 在您的示例中就足够了。