Ошибки TIdHTTP 10.6.2: ошибка сокета #11001 & #10051
Мне действительно нужна твоя помощь снова.
Я пытаюсь создать крошечное приложение менеджера загрузок, используя TIdHTTP из Indy 10.6.2.5263 (поставляется с XE8 Update 1) на C++ Builder XE8.
Но я всегда получаю ошибки Socket Error #11001 - Host not found
когда целевой адрес загрузки http://www.rarlab.com/rar/wrar53b1.exe
, Также, Socket Error #10051 - Network is unreachable
когда адрес загрузки меняется на http://5.135.104.98/rar/wrar53b1.exe
,
Я не знал, почему я всегда получаю эти ошибки, поскольку все остальные мои установленные приложения (Firefox, YM, IDM и т. Д.) Обычно подключены к Интернету.
Я использую следующий простой код.
UNIT1.CPP
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DownloadClick(TObject *Sender)
{
String FileName;
String IB = InputBox("Download Manager", "Address", "");
TFileStream* FStream = new TFileStream(FileName, fmCreate | fmOpenWrite);
try
{
IdHTTP->ConnectTimeout = 1000;
IdHTTP->ReadTimeout = 1000;
IdHTTP->Get(IB, FStream);
ShowMessage("Download Complete");
}
__finally
{
delete FStream;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdHTTPWork(TObject *ASender, TWorkMode AWorkMode, __int64 AWorkCount)
{
if (ProgressBar->Max > 0)
{
DownloadStatus->Caption = IntToStr(AWorkCount) + "bytes of" + IntToStr(ProgressBar->Max) + "bytes.";
ProgressBar->Position = AWorkCount;
}
else
DownloadStatus->Caption = IntToStr(AWorkCount) + "bytes.";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdHTTPWorkBegin(TObject *ASender, TWorkMode AWorkMode, __int64 AWorkCountMax)
{
ProgressBar->Position = 0;
ProgressBar->Max = AWorkCountMax;
if (AWorkCountMax > 0)
DownloadStatus->Caption = "Transfering: " + IntToStr(AWorkCountMax);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::IdHTTPWorkEnd(TObject *ASender, TWorkMode AWorkMode)
{
if (AWorkMode != wmRead)
return;
DownloadStatus->Caption = "Done";
ProgressBar->Position = 0;
}
//---------------------------------------------------------------------------