zoukankan      html  css  js  c++  java
  • 自动检查网络连接状况,如果异常自动重连

    {
    author:cxg
    断网自动检查并提示,自动重连
    }

    unit ClientTestConnected;

    interface

    uses
      SysUtils, Classes, SqlExpr,uNetCommon;

    type
      TWaitThread = class(TThread)
      private
        { Private declarations }
        fNetConnect:Boolean;
        FCheckInterval: Integer;
        FMsg: string;
      protected
        procedure ShowMsg;
        procedure Execute; override;
        procedure ServerOpen;
        procedure ServerClose;
        function ConnRemoteSvr(cn:TSQLConnection;const hostname,UserName,password:string;
          const port:Integer):Boolean;
      public
        NetCheck1: TNetCheck;
        constructor Create(const ACheckInterval: Integer);
        destructor Destroy; override;

        procedure CheckNetConnect(Sender: TObject; var objWbemObject,
          objWbemAsyncContext: OleVariant);
        procedure CheckNetDisconnect(Sender: TObject; var objWbemObject,
          objWbemAsyncContext: OleVariant);
      end;

    implementation

    uses ClientForm;

    procedure TWaitThread.ServerClose;
    begin
      FrmMain.SQLConnection1.Close;
    end;

    procedure TWaitThread.ServerOpen;
    begin
      if fNetConnect then
      FMsg := '正在连接...'
      else FMsg :='网络异常';
      Synchronize(ShowMsg);
      if ConnRemoteSvr(FrmMain.SQLConnection1,'localhost','cxg','123',211) then
      begin
        FMsg := '网络正常';
        Synchronize(ShowMsg);
      end;
    end;

    procedure TWaitThread.ShowMsg;
    begin
      FrmMain.Label1.Caption := FMsg;
    end;

    procedure TWaitThread.Execute;
    begin
      try
        ServerOpen;
        fNetConnect :=True;
      except
        fNetConnect :=False;
      end;

      repeat
        Sleep(FCheckInterval);
        if not fNetConnect then
        begin
          FCheckInterval := 3000;
          ServerClose;
          ServerOpen;
        end;
      until Terminated;
    end;

    procedure TWaitThread.CheckNetConnect(Sender: TObject; var objWbemObject,
      objWbemAsyncContext: OleVariant);
    begin
      fNetConnect := True;
    end;

    procedure TWaitThread.CheckNetDisconnect(Sender: TObject; var objWbemObject,
      objWbemAsyncContext: OleVariant);
    begin
      fNetConnect :=False;
    end;

    function TWaitThread.ConnRemoteSvr(cn: TSQLConnection; const hostname, UserName,
      password: string; const port: Integer): Boolean;
    begin
      try
      cn.Close;
      cn.DriverName := 'DataSnap';
      cn.LoginPrompt :=False;
      Cn.ConnectionName := 'DataSnapCONNECTION';
      cn.Params.Clear;
      cn.Params.Add('DriverName=DataSnap');
      Cn.Params.Add('HostName='+HostName);
      Cn.Params.Add('Port='+inttostr(port));
      Cn.Params.Add('User_Name='+UserName);
      Cn.Params.Add('Password='+PassWord);
      cn.Open;
      Result :=True;
      except
        Result :=False;
      end;
    end;

    constructor TWaitThread.Create(const ACheckInterval: Integer);
    begin
      FCheckInterval := ACheckInterval;
      NetCheck1 :=TNetCheck.Create(nil);
      NetCheck1.OnNetWireConnect:=CheckNetConnect;
      NetCheck1.OnNetWireDisconnect:=CheckNetDisconnect;
      inherited Create(False);
    end;

    destructor TWaitThread.Destroy;
    begin
      NetCheck1.Free;
      NetCheck1 :=nil;
      inherited;
    end;

    end.

  • 相关阅读:
    【网络编程3】网络编程基础-arp请求(局域网主机扫描)
    【CTF MISC】隐写术wireshark找出图片-“强网杯”网络安全挑战赛writeup
    【网络编程2】网络编程基础-发送ICMP包(Ping程序)
    【网络编程1】网络编程基础-TCP、UDP编程
    【漏洞分析】两个例子-数组溢出修改返回函数与strcpy覆盖周边内存地址
    【Python】zip文件密码破解
    【bzoj1923】[Sdoi2010]外星千足虫 高斯消元
    spring cloud zuul在使用中遇到的坑 : 转发时自动去掉prefix
    Eclipse MAT:浅堆 vs 保留堆
    Java SDK夯住(Hang)问题排查
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940916.html
Copyright © 2011-2022 走看看