在 firemonkey 中禁用 Indy TIdTCPClient 连接重试

disable indy TIdTCPClient connect retries in firemonkey

我有这个代码来检查与我的服务器的连接 所以代码是这样的:

function CheckInternet(ssip:string): boolean;
begin
result:=false;
with form1.IdTCPClient1 do
  try
    ReadTimeout:=2000;
    ConnectTimeout:=1000;
    Port:=80;
    Host:=ssip;
    Connect;
    Disconnect;
    result:=true;
  except
    on E:EIdSocketError do
      result:=false;
    end;
end;

在 运行 之后: 如果服务器在线,一切正常 但如果服务器在线,我会收到很多这样的错误:

debugrelease模式没有区别!都有错误 同样在 android 这导致两个应用程序崩溃并且不处理剩余代码!!.. 我怎样才能避免这个错误?

只有当您在主 UI 线程的循环中调用 CheckInternet() 并且不捕获引发的异常时,才会发生您看到的情况。弹出消息由 FMX 中的默认异常处理程序在捕获未捕获的异常时显示。

EIdSocketError 不是 Connect() 可以引发的唯一异常类型。还有其他几种可能的类型,您没有捕捉到。您应该从 except 块中删除过滤器:

function CheckInternet(ssip:string): boolean;
begin
  result:=false;
  with form1.IdTCPClient1 do
  try
    ConnectTimeout:=1000;
    Port:=80;
    Host:=ssip;
    Connect;
    Disconnect;
    result:=true;
  except
    result:=false;
  end;
end;