在不重新启动下载的情况下恢复EIdSocketError连接 - Delphi

时间:2014-01-22 18:17:39

标签: delphi indy delphi-xe3

美好的一天......

我下载了一个使用except on E: EIdSocketError the begin生成错误Socket'm的程序......他向我展示了生成的错误......但是我想解决这个错误......因为它与网站我正在下载,他为该程序,我无法返回任何下载...除非你关闭程序并重新打开...

我怎么能得到这个错误,让他尝试重置一个新的网站连接,而不必重新启动程序...所以我回去下载最新下载的文件....因为有套接字错误已经重新启动程序并返回下载Zero ... 1mb文件很小,但下载时间约为200:

on E: EIdSocketError do begin
                     ShowMessage('Socket 2');

                     // +++++------
                     FreeAndNil(fileDownload);
                     fileDownload := TFileStream.Create(local_exe+'media_'+IntToStr(down_num)+'.mp4', fmCreate);
                     IdHTTP.Get(montarURL, fileDownload);
                     Memo1.Lines.Add(formatdatetime('dd/mm/yyyy',now)+' '+formatdatetime ('hh:mm:ss',now)+' Lista '+IntToStr(numero_tentativa_loop_um)+'. Connection restored.');
                 end;

2 个答案:

答案 0 :(得分:5)

EIdSocketError正是它的名字所说的 - 发生了套接字错误。在没有看到实际的套接字错误代码的情况下,通常您只需要Disconnect()套接字,Clear IOHandler.InputBuffer和重新Connect()并恢复下载你离开的地方(如果可能的话)或者从头开始重新开始下载。

对于HTTP,如果正在下载的资源接受Range: bytes=...请求标头(请参阅TIdHTTP.Request.Range属性),则可以恢复下载,例如,如果它报告了Accept-Ranges: bytes响应标头(在较早的下载尝试中查看TIdHTTP.Response.AcceptRanges属性)。有关详细信息,请参阅RFC 2616 Section 14.35

更新:例如:

try
  IdHTTP.Get(montarURL, fileDownload);
except
  on E: EIdSocketError do begin
    IdHTTP.Disconnect;
    if IdHTTP.IOHandler <> nil then IdHTTP.IOHandler.InputBuffer.Clear;
    ...
    if IdHTTP.Response.AcceptRanges = 'bytes' then begin
      IdHTTP.Request.Range := IntToStr(fileDownload.Size) + '-';
    end else begin
      fileDownload.Size := 0;
    end;
    IdHTTP.Get(montarURL, fileDownload);
    ...
  end;
end;

答案 1 :(得分:-1)

套接字错误#10054必须纠正,因为他是那个出现的人......我不知道它是否会与其他人合作:

RemoveComponent(IdHTTP);
IdHTTP.Free;
IdHTTP := Nil;
IdHTTP := TIdHTTP.Create(Self);

ATT MT