delphi判断网络状态是否正常

delphi判断网络状态是否正常

 

如果网络正常才执行远程服务器Rest的CRUD( 增删改查等Put、Post、Get、Delete等请求):

private

    FNetErrored:Boolean; //如果网络正常才执行远程服务器Rest的CRUD( 增删改查等Put、Post、Get、Delete等请求)

    Procedure AProc;

//......

uses myFuc_UnifiedPlatForm;   //:我的客户端函数方法库  //:调用下面的:RestWebService

 

Procedure AProc;

begin

    FNetErrored:=(RestWebService.Trim).Contains('Net Error');

         //:默认访问超稳定的百度搜索首页以此来判断:客户端网络问题:
           //:所有Rest请求或delphi dataSnap客户端请求,
           //:先判断客户端网络状态再开始做  
    
    if FNetErrored then
    begin
      Lbl_TotalRecs.Text:='网络异常';exit;
    end;

    //  ......

end;

 

//  uses myFuc_UnifiedPlatForm;   

   //:我的客户端函数方法库  //:调用下面的:RestWebService :

 

function RestWebService(
  const ABaseUrl:string='https://www.baidu.com/';
  ATimeout:Integer=100):string;overload;

      //:若用于测试网络,超时时要很短默认100毫秒:参考网络ping命令的超时
var
  LRESTClient: TRESTClient;
  LRESTRequest: TRESTRequest;
  LRESTResponse: TRESTResponse;
  LResultStr:string;

  LRestReqErr:ERequestError;  //:异常类:uses Rest.Types
  LRestReqStatusCode:Integer; //:异常响应状态码:默认0:正常值200
  LRestReqStatusText:string;  //:异常响应状态文本:默认''
begin
  //2、设置Rest组件参数:
  LRESTClient:= TRESTClient.Create(nil);
    //:很重要:回调的字符集和压缩编码:FallbackCharsetEncoding
  LRESTClient.ResetToDefaults;
    //:类会被重新产生,应放到其它属性之前
  LRESTClient.BaseURL:=ABaseUrl;//:重要 :设置服务器方法的资源位置
  LRESTClient.HandleRedirects:=true;//:允许处理重定向:重要
    //:RaiseExceptionOn500:可返回App服务器内部异常状态
  LRESTResponse:= TRESTResponse.Create(nil);
  LRESTResponse.ResetToDefaults;

  LRESTRequest:= TRESTRequest.Create(nil);
  LRESTRequest.ResetToDefaults;
  LRESTRequest.Client:=LRESTClient;
  LRESTRequest.Method:=TRESTRequestMethod.rmGET;
  LRESTRequest.Resource:='';
  LRESTRequest.Response:=LRESTResponse;
  LRESTRequest.Timeout:=ATimeout; //:默认值100毫秒
  //同步执行:
  try
    try
      try
        LRESTRequest.Execute;
        //产生请求异常的响应结果://LRestReqStatusCode:=200; //:正确的返回//LRestReqStatusText:='OK';//:正确的返回
      except
        try
          {
          LRestReqErr:=ERequestError.Create(
            LRestReqStatusCode,LRestReqStatusText,LResultStr);
          if LRestReqStatusCode<>0 then
            //LRestReqStatusCode=0或LRestReqStatusText=''就不管什么情况反正出错了
            //:如果是请求错误(不含任何网络异常和服务器错误)
            //:所以不管请求,只用响应来做判断
          else //:是响应错误:
          }
          begin
            if LRESTRequest.Response.StatusCode=500 then
                //or:if LRESTRequest.Response.StatusText.Contains('Internal Server Erro')
              LResultStr:='{"result":["服务器内部错误:Internal Server Erro"]}'
            else  //:内部服务器错误:调用了,但请求格式错误或参数错误导致不能成功产生响应
            if not (LRESTRequest.Response.StatusCode=500)
              and not (LRESTRequest.Response.Status.SucessCreated_201)
                //:内部服务器无错误:调用了,但服务器无网络或服务器未能成功启动数据库问题导致不能成功产生响应
            then
              LResultStr:='{"result":["服务器网络故障:可能Net Error或Server not started或Database Error"]}'
            else
              LResultStr:=
               'ClientErrorBadRequest_400:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorBadRequest_400,true)
              +sLineBreak+'ClientErrorUnauthorized_401:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorUnauthorized_401,true)
              +sLineBreak+'ClientErrorForbidden_403:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorForbidden_403,true)
              +sLineBreak+'ClientErrorNotFound_404:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorNotFound_404,true)
              +sLineBreak+'ClientErrorNotAcceptable_406:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorNotAcceptable_406,true)
              +sLineBreak+'ClientErrorDuplicate_409:'+BooltoStr(LRESTRequest.Response.Status.ClientErrorDuplicate_409,true)
              ;
          end;
        finally
          //LRestReqErr.Free;
        end;
      end;
    finally
      if not LResultStr.Contains('Error') then
        LResultStr:='{"result":["成功执行:Success"]}';
          //:直接返回成功执行的Json格式字符串
    end;
  finally
    //LResultStr:=LRESTRequest.Response.Content;
    Result:=LResultStr;//:返回Json格式字符串
    //释放Rest组件:
    LRESTClient.Free;
    LRESTRequest.Free;
    LRESTResponse.Free;
  end;
end;

发布了61 篇原创文章 · 获赞 6 · 访问量 5552

猜你喜欢

转载自blog.csdn.net/pulledup/article/details/104584564