在一个   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;