2013-04-28 102 views
1

我创建的自动连接到本地服务器,并下载更新程序,这里是代码:TIdHTTP异常处理

// Connect to web server and download ToBeInstalled.ini 
Url := 'http://'+IPAdd+'/ToBeInstalled.ini'; 
MS := TMemoryStream.Create 
    try 
    try 
     http.Get(url, MS); 
     code := http.ResponseText; 
    except 
     on E: EIdHTTPProtocolException do 
     code := http.ResponseCode; 
    end; 
    MS.SaveToFile(UserPath + 'ToBeInstalled.ini'); 
    finally 
    http.Free(); 
    end; 

程序工作得很好,而在办公室,但是当用户回家并不能达到服务器或服务器不可用的get“套接字错误#10061'

enter image description here

我不知道如何捕捉一个更坏的消息是,程序停止执行该误码M毕竟在一起显示消息。你有什么想法如何解决这个问题。非常感谢。

回答

10

您的异常处理程序仅特别捕获EIdHTTPProtocolException异常,但也可以引发其他几种类型的异常,包括EIdSocketError。您需要相应地更新您的处理程序,或者只是让它捕获所有可能的异常,而不是查找特定的类型。既然你说一个未捕获的异常导致你的整个应用程序失败(这意味着你需要处理的问题不仅仅是TIdHTTP),你还应该更新代码以处理由TMemoryStream引发的异常。

试试这个:

// Connect to web server and download ToBeInstalled.ini 
Url := 'http://'+IPAdd+'/ToBeInstalled.ini'; 
try 
    MS := TMemoryStream.Create 
    try 
    http.Get(url, MS); 
    code := http.ResponseText; 
    MS.SaveToFile(UserPath + 'ToBeInstalled.ini'); 
    finally 
    MS.Free; 
    end; 
except 
    on E: EIdHTTPProtocolException do begin 
    code := http.ResponseCode; 
    end; 
    on E: Exception begin 
    // do something else 
    end; 
end; 
+0

这做到了。非常感谢。 – Cor4Ever 2013-04-28 23:34:52

+5

更多关于'TIdHTTP'异常的信息,请参阅['here'](http://stackoverflow.com/a/13954599/960757)。 [1] – TLama 2013-04-29 06:46:08