2013-04-28 1 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; 

Программа работает достаточно хорошо, в то время как в офисе, но когда пользователи дома и не могут достичь сервер или сервер отсутствует, то прибудет «ошибка сокета # 10061'

enter image description here

Я понятия не имею, как поймать, что одним и тем хуже, что выполнение остановки программы все вместе после этой ошибки м отображается эссе. У вас есть идея, как это исправить. Огромное спасибо.

ответ

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

+5

Что-то еще о 'TIdHTTP' исключениях вы можете найти [' здесь'] (http://stackoverflow.com/a/13954599/960757). [+1] – TLama