程序中使用了ClientSocket控件,用来和服务端进行连接。主程序在程序初始化时赋给ClientSocket的属性host和port,然后建立连接。连接建立完成后,建立线程,线程中使用ClientSocket进行数据的收取和发送。如果在程序运行时发生断网,希望程序能自己尝试恢复连接。但是一直没有测试成功。现在将代码贴出来,请高手指正。
procedure TIntfaceServer.Execute;
var
    sBuf: String;
    SendText: String;
begin
  { Place thread code here }
     FreeOnTerminate:=True ;
     SendText:='*W11' + frmMain.ManageDepID + '|' + frmMain.RegisterCode + '^';
     AddString(SendText);
    while not Terminated do
    begin
        try
            while not ClientSocket.Active do
            begin
                ClientSocket.Active :=True;
                Sleep(100);
            end;
            if ClientSocket.Active then
            begin
                while(ClientSocket.Socket.ReceiveLength=0) do
                begin
                    sleep(100);
                end;
                sBuf:=ClientSocket.Socket.ReceiveText;
                fInfo:=sBuf;
                WriteLog(2,fInfo);
                if (fInfo<>'') then
                begin
                    DisposeInfo;
                end;
            end;
        except on e:exception do
            WriteLog(3,e.Message);
        end;
    end;
end;

解决方案 »

  1.   

    while not ClientSocket.Active do
    begin
      Application.Proce.....//不记得怎么打了...   
    end;
      

  2.   

    改成这样试试:
    procedure TIntfaceServer.Execute; 
    var 
    sBuf    : String; 
    SendText: String; 
    begin 
      FreeOnTerminate:=True; 
      SendText:= "*W11 " + frmMain.ManageDepID + " | " + frmMain.RegisterCode + "^ ";     
      AddString(SendText); 
      while not Terminated do 
      begin 
        try 
        while ClientSocket.Active and (ClientSocket.Socket.ReceiveLength=0) do 
        begin
          sleep(100);
        end;
        if ClientSocket.Active then
        begin
            sBuf:=ClientSocket.Socket.ReceiveText; 
            fInfo:=sBuf; 
            WriteLog(2,fInfo); 
            if fInfo < > " " then 
            begin 
              DisposeInfo; 
            end; 
        end
        else begin
        while not ClientSocket.Active do 
        begin 
          ClientSocket.Open; 
          Sleep(100); 
        end; 
      end;
    except on e:exception   do 
         WriteLog(3,e.Message); 
    end; 
      end; 
    end;