1

我创建了一个自动连接到我们的本地服务器并下载更新的程序,代码如下:

// 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”

在此处输入图像描述

我不知道如何抓住那个,更糟糕的是程序在显示该错误消息后一起停止执行。你知道如何解决这个问题。太感谢了。

4

1 回答 1

11

您的异常处理程序仅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;
于 2013-04-28T23:02:30.933 回答