如题,如何释放已断开的ServerSocket.Socket.ActiveConnections的资源.如果有现成例子参考的请发送到[email protected],另开帖送分

解决方案 »

  1.   

    发送心跳包  
    UseInfo_Record=record       
    UseSocket: TCustomWinSocket; //用于连接客户的套接字 
     sUSUEID:string;//用户唯一ID   
     LastTime:TDateTime; //最后接收信息的时间 
      iStatus:integer;                   
     end;
    记录下每个客户端的信息 
    每次心跳包到的时候 修改 LastTime:TDateTime; //最后接收信息的时间 设置定显示器 Timer 每隔段时间检查 LastTime
    如果 now -LastTime >心跳包时间间隔 即认为断线了 
    socket.close;可用 TList 链表保存维护第个客户的UseInfo_Record的信息
    pUseInfo:^UseInfo_Record
    for i:=List.count-1 downto 0 do
    begin
       pUseInfo:= List[i];
       if now-pUseInfo.lastTime>25 then
       begin 
        pUseInfo.UseSocket.close;
        dispose(pUseInof);
        List.delete(i);
       end;
    end;
    List.add(pUseInfo);当客户连接到时 新增一条记录  填充 pUseInfo
    List.delete(i);大概是以上样子 
      

  2.   


    http://www.west263.com/info/html/wangluobiancheng/qita/20080411/63944.html
      

  3.   

    以keepalive为关键字在百度搜下 答案
    这是个比较无解的问题
    当客户端非正常断开 服务端是不知道的,会一直保持连接状态 所有系统都是这样 
    只能自己判断了