自动检查网络连接状况,如果异常自动重连

{
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.

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值