在一个 C/S 系统中,客户端连接服务器时,如果服务器未启动,客户端会每隔几秒主动
去连接服务器(ClientSocket.Open),在每一次的ClientSocket.Open之前,都执行一次ClientSocket.close。这样,如果服务器一直未启动,就会发生以上的问题。有人说在OnError里面socket.close;我也这样做了。下面把部分代码贴出来,但是程序在运行8小时候会自己挂掉。procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
try
mainStatusBar.Panels[0].Text:='与服务器端的连接发生错误...';
ErrorCode := 0;
m_isconnected:=false; //连接状态标志
socket.Close;
except
on E:exception do
begin
writelog('异常:TForm1.ClientSocket1Error异常,原因---'+e.Message);
showmessage('TetcRoadForm.ClientSocket1Error异常'+e.Message);
end;
end;
end;procedure TetcRoadForm.showTimeTimerTimer(Sender: TObject);
begin
if not m_isconnected then //没有连接 ,自动连接。
begin
if secondsbetween(now,m_sendtime)>1 then
begin
try
inc(m_connecttimes);
Clientsocket1.close;
ClientSocket1.Open;
m_sendtime:=now;
writelog('连接次数:'+inttostr(m_connecttimes));
except
on E:exception do
begin
writelog('异常:sockets连接异常,'+e.Message+'连接次数:'+inttostr(m_connecttimes));
end;
end;
end;
end;
end;
去连接服务器(ClientSocket.Open),在每一次的ClientSocket.Open之前,都执行一次ClientSocket.close。这样,如果服务器一直未启动,就会发生以上的问题。有人说在OnError里面socket.close;我也这样做了。下面把部分代码贴出来,但是程序在运行8小时候会自己挂掉。procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
try
mainStatusBar.Panels[0].Text:='与服务器端的连接发生错误...';
ErrorCode := 0;
m_isconnected:=false; //连接状态标志
socket.Close;
except
on E:exception do
begin
writelog('异常:TForm1.ClientSocket1Error异常,原因---'+e.Message);
showmessage('TetcRoadForm.ClientSocket1Error异常'+e.Message);
end;
end;
end;procedure TetcRoadForm.showTimeTimerTimer(Sender: TObject);
begin
if not m_isconnected then //没有连接 ,自动连接。
begin
if secondsbetween(now,m_sendtime)>1 then
begin
try
inc(m_connecttimes);
Clientsocket1.close;
ClientSocket1.Open;
m_sendtime:=now;
writelog('连接次数:'+inttostr(m_connecttimes));
except
on E:exception do
begin
writelog('异常:sockets连接异常,'+e.Message+'连接次数:'+inttostr(m_connecttimes));
end;
end;
end;
end;
end;
http://topic.csdn.net/t/20020423/23/671232.html
CS.socket.close;
CS.Socket.Disconnect(CS.Socket.SocketHandle);