我开了一个Tclientsocket向服务器连接,但因为网络问题,长一时间断开,Tclientsocket不断执行连接服务器动作,过了10个小时就出错了,说系统的缓冲不够或CONNXX连接数过多第一次我热行了一个FALSE的了为什么还会这样?

解决方案 »

  1.   

    这得看一下你的连接源码才能下定论.
    一般不会出现这一问题.
    联接一般在SERVER和CLIENT两头控制或一头控制.
      

  2.   

    function conn():string;
    begin
     if form1.ClientSocket1.Active then form1.ClientSocket1.Active := False;
          with form1.ClientSocket1 do
          begin
            Host := ipadd;
            port:=strtoint(portin);
            ClientType:=ctNonBlocking;
           // ClientType:=ctBlocking;
            Active := True;
            form1.suibutton2.Caption:='已 连 接';
            form1.suibutton2.Enabled :=false;
            form1.suibutton3.Enabled :=true;
          end;end;procedure TForm1.ClientSocket1Error(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    begin
    try
    if (errorcode=10053) then
    begin
    form1.Timer5.Enabled :=false;
    errorcode:=0;
    form1.clientsocket1.Active :=false;
    form1.memo1.Lines.Add('['+Datetimetostr(now)+']'+'----服务器停止服务');
    //form1.suibutton2.Caption :='连 接';
    //form1.suibutton2.Enabled :=true;
    //form1.suibutton3.Enabled :=false;
    form1.Timer2.Enabled :=true;
    end;except
    end;end;procedure TForm1.Timer2Timer(Sender: TObject);
    begin
    timer2.Enabled :=false;      timer5.Enabled :=false;
          errorstr:='失败';
          clientsocket1.Active:=false;
          clientsocket1.Close;
          conn();end;
      

  3.   

    不知道你用的是那一个控件,
    我用的是Delphi7里的INDY Client 里的IDTCPClient做客户端。
    现在在一单位中已经运行快五个月了,没问题(7*24)。
    如果你也是用这个控件的话,那么起动CLIENT好象是用Connect函数,
    在SOCKET中CLIENT中不存在数量过多的问题,一般在SERVER端存在线程开销但一般都是自动监控的
    一但客户关闭,线程自动取消。