美好的一天......
我下载了一个使用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;
答案 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