问题设定:
在一个数据库管理系统开发过程,在系统启动之前,先用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连接数据库.
在一个数据库管理系统开发过程,在系统启动之前,先用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连接数据库.
begin
ClientSocket1.Active :=true;
sleep(100);
end;
//这里出现了死循环,连不上去
end; ]
服务器开没?
开了,一这样执行就会出现程序死循环.如果仅仅clientsocket1.active:=true;
这结果会马上调用连接数据库的程序段,clientsocket的onconnect时间要在程序启动到最后才能执行.
所以报错,推出.
begin
ClientSocket1.Active :=true;
sleep(100);
end;
//这里出现了死循环,连不上去 没有道理啊,ClientSocket1.Active :=true; 就行,用循环就会死掉啊,你把sleep的时间设置长点,再跟踪下看~
我已经跟踪了半天...
服务器端能显示出客户端连接上来了,也就是如果clientsocket1.active:=true就可触发了服务器端的clientconnect事件.用循环的话,服务器端的clientsocket会不断增加,
可active:=true就是出发不了clientsocket的onconnection事件