问题设定:
     在一个数据库管理系统开发过程,在系统启动之前,先用tclientsocket去某指定服务器取得数据库得访问帐号跟密码.然后使用TConnection做一个总连接.代码如下,希望有高手提出解决
procedure TDM.GetConnectInfor;
var
  sysini:Tinifile;
  Iport:integer;
begin
  sysini:=Tinifile.Create(GetcurrentDir+'\sys.ini');
  sHost:=sysini.ReadString('设置','Servername','');
  iport:=sysini.ReadInteger('设置','port',1);
  sSystemName:=sysini.ReadString('设置','SystemName','');
  SDBname:=Sysini.ReadString('设置','DBServer','');
  sysini.Free;
  ClientSocket1.Address:=sHost;
  ClientSocket1.Port:=iPort;
  sSystemName:=epc(sSystemName);
  while not ClientSocket1.active do
    begin
      ClientSocket1.Active :=true;
      sleep(100);
    end;
   //这里出现了死循环,连不上去
end;...
procedure TDM.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  if Clientsocket1.Active  then
     begin
       //showmessage('1');
       ClientSocket1.Socket.sendtext(sSystemName);
       sleep(100);
       ReceiveStr:=ClientSocket1.Socket.ReceiveText;
       receivestr:=dpw(receivestr);
     end;
end;
...
接下来用Tconnection连接数据库.

解决方案 »

  1.   

      while not ClientSocket1.active do
        begin
          ClientSocket1.Active :=true;
          sleep(100);
        end;
       //这里出现了死循环,连不上去
    end; ]
    服务器开没?
      

  2.   

    to brightyang:
       开了,一这样执行就会出现程序死循环.如果仅仅clientsocket1.active:=true;
    这结果会马上调用连接数据库的程序段,clientsocket的onconnect时间要在程序启动到最后才能执行.
    所以报错,推出.
      

  3.   

    while not ClientSocket1.active do 
        begin 
          ClientSocket1.Active :=true; 
          sleep(100); 
        end; 
       //这里出现了死循环,连不上去 没有道理啊,ClientSocket1.Active :=true; 就行,用循环就会死掉啊,你把sleep的时间设置长点,再跟踪下看~
      

  4.   

    不用跟踪了,..
    我已经跟踪了半天...
    服务器端能显示出客户端连接上来了,也就是如果clientsocket1.active:=true就可触发了服务器端的clientconnect事件.用循环的话,服务器端的clientsocket会不断增加,
    可active:=true就是出发不了clientsocket的onconnection事件