你可以这样,象QQ一样,服务器和客户端连接后,
启动一条工人线程:
AfxBeginThread(CheckOnline,0);
在这个线程里检查客户端是否在线:
UINT CheckOnline(LPVOID param)
{
CServerApp * pApp=(CServerApp*)AfxGetApp();
UserOnline * pUsers=pApp->m_pUsers;

while(pApp->m_bServerStarted)
{
Sleep(TimerSpanServer);//设置一个时间周期,当用户一段时间没有响应后,服务器判断已经下线。
for(int i=0;i<pApp->m_nTotalUserNumber&&pApp->m_bServerStarted;i++)
{
if(!pUsers[i].State)continue;

CMsg msg;
msg.index=TOTAL_ONLINE;
msg.tarIP=pUsers[i].IP;
msg.nPort=pUsers[i].Port;
msg.Value=pApp->m_nNumberOnline;
BOOL bSu=pSocket->SendData(&msg);
if(bSu)continue;

pUsers[i].State=0;
::InterlockedDecrement((LPLONG)&pApp->m_nNumberOnline);

}

}

return 0;
}
在这个线程里面服务器一直往客户端发送是否在线的消息。