我们正在使用RAD Studio 10.0 Seattle来构建一个通过Web服务获取数据的iOS应用程序。由于Apple要求所有应用程序从2016年6月1日起支持IPv6,因此我们的应用更新已被拒绝。
我们正在使用 WSDL Importer 在RAD Studio中创建Web服务类,然后调用Web服务。当应用程序连接到IPv6网络时,它会抛出Socket Error #51 Network is unreachable...
。
有谁知道我们如何解决这个问题?
答案 0 :(得分:0)
尝试使用此功能:
function GetHost(Host: String): Boolean;
begin
result := '';
try
GStack.ResolveHost(Host, TIdIPVersion.Id_IPv6);
result := '[' + Host + ']';
except
GStack.ResolveHost(Host, TIdIPVersion.Id_IPv4);
result := Host;
end;
end;
在使用“IdStack”和“IdGlobal”中添加
您必须通过您的主机(例如www.google.com)并且func会返回包含或不包含'['的结果。
现在,你必须使用它......'http://'+ getHost('www.google.com')
如果你在IPV6网络中,最后的字符串将是(http://[www.google.com])
答案 1 :(得分:0)
使用上一个答案,我想出了这个适用于我的代码。我可以输入完整的soap URL并返回IPV6 URL的正确IPV4。在使用部分中包含“idURI”。
class function TPortalTools.GetRealUrl(Url: string): string;
var
IdURI: TIdURI;
begin
TIdStack.IncUsage;
IdURI := TIdURI.Create(Url);
try
try
GStack.ResolveHost(IdURI.Host, TIdIPVersion.Id_IPv6);
IdURI.IPVersion := TIdIPVersion.Id_IPv6;
except
IdURI.IPVersion := TIdIPVersion.Id_IPv4; // Just in case.
end;
// Put it back together.
Result := IdURI.GetFullURI([]);
finally
FreeAndNil(IdURI);
TIdStack.DecUsage;
end;
end;