关于一个udp的问题,请大家帮我看看怎么解决

                            
{$WARN   SYMBOL_DEPRECATED   OFF}   
  unit   loginp;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   jpeg,   ExtCtrls,   RzTabs,   RzPanel,   StdCtrls,   RzLabel,   Mask,   RzEdit,  
      RzCmboBx,   RzButton,   Buttons,   Menus,   IdUDPClient,   IdBaseComponent,  
      IdComponent,   IdUDPBase,   IdUDPServer,IdSocketHandle;  
   
  type  
      Tlogin   =   class(TForm)  
          Image1:   TImage;  
          RzPanel1:   TRzPanel;  
          RzPageControl1:   TRzPageControl;  
          TabSheet1:   TRzTabSheet;  
          RzLabel1:   TRzLabel;  
          RzLabel2:   TRzLabel;  
          RzLabel3:   TRzLabel;  
          RzComboBox1:   TRzComboBox;  
          pass:   TRzEdit;  
          cuser:   TRzComboBox;  
          RzButton1:   TRzButton;  
          RzButton2:   TRzButton;  
          RzToolbarButton1:   TRzToolbarButton;  
          PopupMenu1:   TPopupMenu;  
          N1:   TMenuItem;  
          N2:   TMenuItem;  
          N3:   TMenuItem;  
          IdUDPServer1:   TIdUDPServer;  
          IdUDPClient1:   TIdUDPClient;  
          Label1:   TLabel;  
          procedure   RzButton2Click(Sender:   TObject);  
          procedure   FormCloseQuery(Sender:   TObject;   var   CanClose:   Boolean);  
          procedure   RzButton1Click(Sender:   TObject);  
          procedure   RzToolbarButton1Click(Sender:   TObject);  
          procedure   FormCreate(Sender:   TObject);  
          procedure   IdUDPServer1UDPRead(Sender:   TObject;   AData:   TStream;  
              ABinding:   TIdSocketHandle);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      login:   Tlogin;  
      aa:STRING;  
      bb:STRING;  
      cishu:integer;  
  implementation  
   
  uses   dmp,conn,conn2,md5;  
   
  {$R   *.dfm}  
   
  //判断输入的ip地址是否合法  
  function   IsIp(Str:   string):   Boolean;  
  var  
      I,   K,   DotCnt   :   Integer;  
      Num:   string;  
      Arr:   Array   [1..4]   of   string;  
  begin  
      Result   :=   False;  
      DotCnt   :=   0;  
      //由'0'..'9',   '.'组成  
      For   I   :=   1   to   Length(Str)   do  
      begin  
          if   Not   (Str[I]   in   ['0'..'9',   '.'])   then  
              Exit  
          else  
          if   Str[I]   =   '.'   then  
              inc(DotCnt);  
      end;  
      //点分隔符号数量应该=3  
      if   DotCnt   <>   3   then   Exit;  
      For   K   :=   1   to   3   do  
      begin  
          I   :=   Pos('.',   Str);  
          Num   :=   Copy(Str,   1,   I   -   1);  
          Delete(Str,   1,   I);  
          Arr[K]   :=   Num;  
      end;  
      Arr[4]   :=   Str;  
      try  
          DotCnt   :=   0;  
          For   I   :=   1   to   4   do  
          begin  
              K   :=   StrToInt(Arr[I]);  
              //每字节的值应介于0~255之间  
              if   ((K   >=   0)   and   (K   <=   255))   then  
                  Inc(DotCnt);  
          end;  
          //四个字节都满足0~255之间,则合法  
          if(DotCnt   =   4)   then  
              Result   :=   True;  
      except  
      end;  
  end;  
  //==============================================================================  
  procedure   Tlogin.RzButton2Click(Sender:   TObject);  
  begin  
      application.Terminate;  
  end;  
   
  procedure   Tlogin.FormCloseQuery(Sender:   TObject;   var   CanClose:   Boolean);  
  begin  
        application.Terminate;  
  end;  
   
  procedure   Tlogin.RzButton1Click(Sender:   TObject);  
  var  
      vt:string;  
  begin  
      IdUDPServer1.Active:=True;  
      IdUDPClient1.Active:=true;  
      label1.Caption:='正在连接服务器,请稍后...';  
      if   IsIp(rzcombobox1.Text)   then  
            begin  
                  vt:=RzComboBox1.Text;  
                  IdUDPClient1.Send(vt,6789,'你是否在开着');  
                  SetADOConnection(dm.ADOConnection1,rzcombobox1.Text);  
                  SetADOConnection1(dm.ADOConnection2);  
            end  
      else  
            begin  
                  //showmessage('IP不合法,请从新输入!');  
              Application.MessageBox('IP不合法,请从新输入!','警告',mb_iconwarning);  
   
            end;  
  //==============================================================================  
  end;  
   
  procedure   Tlogin.RzToolbarButton1Click(Sender:   TObject);  
  begin  
  //   左健弹出菜单。  
  popupmenu1.Popup(mouse.CursorPos.x,mouse.CursorPos.y);    
  end;  
   
  procedure   Tlogin.FormCreate(Sender:   TObject);  
  begin  
            //打开idudp  
      with   IdUDPServer1.Bindings.Add   do  
      begin  
          IP:='';  
          Port:=6789;  
      end;  
      //设置本地端口号  
      //   IdUDPClient1.DefaultPort:=6789;  
      //设置超时连接毫秒数  
      IdUDPClient1.ReceiveTimeout:=5000;//毫秒  
      //激活服务  
      label1.Caption:='';  
  end;  
   
  procedure   Tlogin.IdUDPServer1UDPRead(Sender:   TObject;   AData:   TStream;  
      ABinding:   TIdSocketHandle);  
  Var  
      v:String;  
      str,id,name,kl:string;  
  begin  
      if     IdUDPClient1.ReceiveTimeout=5000   then  
          begin  
                IdUDPServer1.Active:=false;  
                IdUDPClient1.Active:=false;  
                APPLICATION.MESSAGEBOX('您要连接的服务器端没有开启或网络不稳定,请稍后在登陆!','系统信息',mb_iconwarning);  
                exit;  
          end;  
      if   AData.Size<=0   then  
          Exit;  
      SetLength(v,AData.Size);  
      AData.Read(v[1],AData.Size);  
      if   v='我已经启动了'   then  
            begin  
                //ShowMessage(ABinding.IP+'   is   Existsed!'+s);//电脑A在线.  
                //判断用户是否存在,并且登陆  
            if   (cuser.Text='')   or   (pass.Text='')   then  
                    APPLICATION.MESSAGEBOX('您输入姓名或密码!','错误',mb_okcancel+mb_iconerror   )  
            else  
                begin  
                    aa:=cuser.text;  
                    bb:=MD5Print(MD5String(pass.Text));  
                    dm.ryxx.close;  
                    dm.ryxx.sql.Clear;  
                    str:='select   yhm,kl,yhid   from   ryxx   where   yhm='''+   aa   +'''   and   kl='''+   bb   +'''';  
                    dm.ryxx.sql.add(str);  
                    //dm.yh.ParamByName('aa').AsString:=cuser.Text;  
                    //dm.yh.ParamByName('bb').AsString:=pass.Text;  
                    dm.ryxx.open;  
   
                    if   not   dm.ryxx.Eof   then  
                            begin  
                                  //mainform.StatusBar1.Panels[0].Text:='当前用户:'+aa;  
                                  //mainform.StatusBar1.Panels[1].Text:='当前日期:'+DateTimeToStr(Now);  
                                  id:=dm.ryxx.FieldByName('yhid').AsString;  
                                  name:=dm.ryxx.FieldByName('yhm').AsString;  
                                  kl:=dm.ryxx.FieldByName('kl').AsString;  
                                  login.Hide;  
                                  //ModalResult:=mrOK;     //密码正确,关闭自己,返回值mrOK;  
   
                                  //mainform.ShowModal;  
                                  //IdUDPServer1.Active:=false;  
                                  //IdUDPClient1.Active:=false;  
                                  //display.ShowModal;  
                          end  
                    else  
                    if   APPLICATION.MESSAGEBOX('您输入用户名或密码有误!请再一次输入','错误信息',mb_ok+mb_iconerror)=idok   then  
                              cishu:=cishu+1;  
                              dm.ADOConnection1.Connected:=false;  
                              dm.ADOConnection2.Connected:=false;  
                              //==============如果输入3次退出系统工程======================  
                                    if   cishu>3   then  
                                            application.Terminate;  
                                        //     cpassword.SetFocus   ;end;  
   
                end;  
   
            end  
      else  
            begin  
                  APPLICATION.MESSAGEBOX('您要连接的服务器端没有开启,请稍后在登陆!','系统信息',mb_iconwarning);  
            end;  
  end;  
   
  end.  
   
   
  我发现我的思路是这样的,点击登陆按钮。然后当dUDPServer1读取到我已经启动了'   这个时候才判断用户是否正确,但是我发现一个问题,如果服务器上程序没有启动,我客户端的程序根本就不执行  
  procedure   Tlogin.IdUDPServer1UDPRead(Sender:   TObject;   AData:   TStream;  
      ABinding:   TIdSocketHandle);,请问我这个登陆验证窗口该怎么做  
 

查看回复