各位同行高手:
我写了一个服务器用ServerSocket的连接与客户端的ClientSocket通讯,但是过了几个钟就不行了,
要重启动软件才行,到底怎么会事???
是不是连接过程中的错误导致还是连接到了一定程度就不行或挂起来了???
请前辈们指点一下小弟!
小弟在此先谢谢了!!!

解决方案 »

  1.   

    程序很长哦!
    只是贴ServerSocket的那部分行吗?
      

  2.   

    procedure TForm_Main.SenterServerSocketClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    var
      IpStr:string;
    begin
      keHuSocket:=Socket;  IpStr:=Socket.RemoteAddress ;
      Label_keHu.Caption :='客户端服务器 '+IpStr+' 已成功连接';
    end;
    procedure TForm_Main.SenterServerSocketClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      Label_keHu.Caption :='客户端服务器已断开连接';
    end;
    procedure TForm_Main.SenterServerSocketClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    begin
      ErrorCode := 0 ;
    end;
    procedure TForm_Main.SenterServerSocketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
      TempRecvStr:string;
    begin
      TempRecvStr:= Socket.ReceiveText;  //从客户端发送过来的字符串
      IDealLbRecvData1(TempRecvStr,Socket); //处理来自客户端的数据
    end;
      

  3.   

    这些程序没问题,问题不是出在这里,Client也贴些出来才好分析啊
      

  4.   

    因为是GPRS服务器,客户端的数量很多,所以掉线很频繁,当连接到了一定时间(大概是几个小时)之后那个ServerSocket好向就挂起来了,但是统一个系统的另外一个ServerSocket是没问题的,说明系统是没问题的,就是那个掉线频繁的ServerSocket没数据通讯,重启动又正常了!
      

  5.   

    因为是GPRS服务器来的,没有Client的,Client是移动那边!
      

  6.   

    是不是ServerSocket的连接到达一定次数后就会出错导致挂起来了???
    clientSocket就会在连接了一定次数连不上就会出错的!!!
      

  7.   

    不行?怎样个不行法?
    说说现象嘛,是socket连不上了还是程序死掉了。
      

  8.   

    程序没死就好向进入死循环的样子,但是同一个系统的另外一个ServerSocket是正常通讯的,说明软件没死!
      

  9.   

    procedure TForm_Main.SenterServerSocketClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    begin
      Socket.Close; //加上这句不然有些资源不会释放。
      ErrorCode := 0 ;
    end;
      

  10.   

    加上socket.close;会弹出一个错误!
      

  11.   

    加上socket.Close ;会弹出"stack overflow"的错误出来!
      

  12.   

    肯定是连接太多没有关掉,serversocket有时候不能监测到连接的断开,要自己去检测才行
      

  13.   

    serversocket有个属性叫activeconnections吧?当前所有的活动连接,一个一个检查喽,如果断开了,就关掉它,释放资源。
    你可以看看windows的资源管理器,看看你的程序是不是有非常多的句柄数,如果是的话,应该是连接没有断开,或者断开了,但是资源没有释放。
      

  14.   

    close掉行吗?为什么我这样操作会出现:
    "stack overflow"的错误出来!
      

  15.   

    楼主在ONERROR调用SOCKET.CLOSE出现堆栈溢出确实是很奇怪的..楼主在Disconnect事件里面写了什么代码呢?
      

  16.   

    你不应该用SOCKET。CLOSE 这样会出错,我用过这两个控件很好用呀。没有出现你说的问题。你要为每一个CLIENT CREATE一下。你应该是用的是阻塞形式的吧。这样最好不要由SERVER SOCKET自己创建。在ACCEPTE 事件时自己创建一下他的线程。 
    ------------------------------------
    本回复仅代表个人的意见和看法,并不保证其正确性.