2014-01-22 64 views
1

好日子......恢復EIdSocketError連接,無需重新啓動下載 - 德爾福

我下載使用except on E: EIdSocketError the begin產生錯誤Socket'm程序......他向我表明生成錯誤...但我想要解決這個錯誤...因爲它斷開與我正在下載的網站,他的程序,我不能返回任何下載...除非你關閉程序並重新打開...

如何我可以得到這個錯誤,讓他嘗試重置一個新的連接到網站,而不必重新啓動程序...所以我回去下載最新下載的文件....因爲套接字錯誤必須重新啓動程序和迴歸N到下載零... 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

你有哪個版本的Delphi?你可以在你的問題中包含一個Delphi版本標籤嗎? – TLama

+1

我有一個版本的Delphi XE3 ... – user3185448

回答

-1

套接字錯誤#10054有改正的,因爲他是一個誰出現了......我不知道這是否會與他人合作:

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

ATT MT

+0

您不需要銷燬並重新創建'TIdHTTP'對象以從套接字錯誤中恢復。 –

+0

這不是正確的答案。這是一個黑客解決方法,而不是解決方案。它並沒有解決停止下載的問題,而是從一開始就重新開始。 –

+1

爲什麼尋求幫助,然後當你從無可爭議的Stack Overflow Indy專家那裏得到它時,Indy開發者不會少,你忽略它?如果你認爲你已經知道所有事情,你怎麼能學會?如果你這麼想,爲什麼要問? –

5

EIdSocketError意味着正是它的名字一樣 - 發生套接字錯誤。在沒有看到實際的套接字錯誤代碼的情況下,通常您只能通過Disconnect()套接字,Clear,IOHandler.InputBufferConnect()恢復您的下載(如果可能),或者重新開始下載重新開始。

對於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;