问题原先在这里请教过、现已解决、特此分享:
原帖见:http://community.csdn.net/Expert/topic/3337/3337468.xml?temp=.2572901原帖中讨论的主要是用心跳包的方法来判断下线的用户。因为在客户端已经因别的用途设置过了时钟、再用时钟进行心跳检测客户端负荷过重。(所做项目客户端为手机-处理能力较弱)所以直接在服务器段进行判断。方法也比较简单、是以定时发送消息、捕获异常的方式来判断客户是否在线。继   承   类:CSocket最后解决方案:设置时钟(时间间隔2分钟)
              文档类::CheckIsOnline()
              //代码片断
              for (pos=m_clientlist.GetHeadPosition();pos!=NULL; )
              {
                  TRY
                  {
                      向链表中的每个SOCKET变量发送测试在线消息
                   }
                   CATCH(CFileException,e)            //捕捉写消息时的错误
                   {
                      进行相应的处理
                      (在我的项目中是向链表中的部分SOCKET变量发送下线的SOCKET变量消息)
                   }
               }
说明:本来担心用服务器单向捕捉会存在一定误差、不过经过几天的验证没有发现误差。一般处理这类问题时主要是把负荷放在客户端(因为PC客户端的处理能力较强、而服务器负荷常常较重)。如果是很弱的客户端这样处理感觉稍微好一些。