我们正在使用RADStudio10.0西雅图构建一个通过web服务获取数据的iOS应用程序。由于苹果要求所有应用程序从2016年6月1日起支持IPv6,我们的应用程序更新被拒绝了。
我们使用WSDL导入程序在RAD中创建web服务类,然后调用web服务。当应用程序连接到IPv6网络时,它会抛出一个Socket Error #51 Network is unreachable...。
有人知道我们怎么解决这个问题吗?
发布于 2016-09-12 13:05:04
试着用这个功能:
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])
发布于 2016-10-07 12:08:43
使用前面的答案,我想出了这段代码,它适合我。我可以输入完整的soap,它返回一个正确的IPV4 of IPV6 URL。在“使用”部分中包括“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;https://stackoverflow.com/questions/39114096
复制相似问题