在我做的一个网络通信程序中,TServerSocket控件使用了几天后,在ServerSocket.Socket.ActiveConnections中会残留很多未断开的连接,高达1000多,这个网络连通正常也就两三秒就完成了的。 我想当一个连接从Accept开始,超过3分钟,就强制把它断开,不知道有什么好方法。

解决方案 »

  1.   

    你可以用 TThreadList 把连接信息(开始连接的时间也保存)保存起来 ,再用个线程对这些连接进行监控,如果时间大于3分钟就断开就行了
      

  2.   

    我在客户端写了一个监控线程,当连接超过一分钟,就自动将连接断开.代码如下:
    type
       TestConnection=class(TThread)
      private
        BeginDate:TDateTime;
      protected
        procedure Execute;override;
        public
        constructor Create;
     end;constructor TestConnection.Create;
    begin
        inherited Create(True);
        FreeOnTerminate:= True;  //线程结束就自动销毁
        BeginDate:=NowDate;     //设置开始时间
    end;procedure TestConnection.Execute;  //不停的对线程进行监控
    begin
      inherited;
      while(not Terminated) do
      begin
           if MinutesBetween(Now,BeginDate)>1  then  //大于一分钟就断开
           begin
             Form1.ClientSocket1.Active:=False;
             Terminate;
           end;
      end;
    end;
      

  3.   

    非常感谢xxc028() , 因为客户端程序已经分发出去了,我现在只能在服务器程序上做断开连接操作。 服务器上可能会同时接收到数十个到上百个连接。 每一连接都用以上代码来控制起会不会都服务器有影响。