我在多设备应用程序上使用 TIdHTTP 组件(在 Rad Studio Tokyo 10.2.3 中构建)。我所做的只是将文件下载到我的本地应用程序文件夹(iOS)。我想确保它适用于 IPv6,但我没有看到 TIdHTTP 的“IPVersion”属性。我在 rad studio 的其他 indy 组件上看到它(例如 IdFTP)。
有没有办法在 TIdHTTP 组件的代码中设置 IPVersion?下面是我用来下载文件的代码片段。如果它在 IPv4 上失败,它应该接下来尝试 IPv6:
UnicodeString LFileName = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetDocumentsPath(), "myfile.txt");
TFileStream* fs = new TFileStream(LFileName, fmCreate);
Form1->TIdHTTP->ConnectTimeout = 8000; // give it 8 seconds
Form1->TIdHTTP->ReadTimeout = 8000;
try
{
UnicodeString URL = "http://myservername.com/myfile.txt";
Form1->TIdHTTP->Get(URL, fs);
Form1->TIdHTTP->Disconnect();
// ShowMessage("Good download via IPv4");
}
catch(const System::Sysutils::Exception &)
{
try
{
Form1->TIdHTTP->Disconnect(); // clean up from IPv4 try
UnicodeString URL = "http://[myservername.com]/myfile.txt";
Form1->TIdHTTP->Get(URL, fs);
Form1->TIdHTTP->Disconnect();
// ShowMessage("Good download via IPv6");
现在我只是在域名周围加上括号,希望这对 IPv6 有效……在我获得真正的仅 IPv6 网络设置(正在处理)之前,我不能确定。
更新:我刚刚有一个应用程序被 Apple Store 接受,它使用这种方法,很明显它通过了 IPv6 测试。供参考