如果客户端发生异常的话,比如说断电,或者异常掉线,服务器用什么方法很快的发现这个异常。我现在是不停的ping这几个客户端,每当发现一个新的客户连接,我就开一个线程来ping这个客户的ip。但是实际中我发现,如果客户端变多的话,那么这种方式就变得很慢,通常某个客户掉线会等好长时间才能发现。我想请教各位,有没有做过这方面的工作,采用什么方法比较好。

解决方案 »

  1.   

    WSAAsyncSelect(ClientSocket,m_hWnd,WM_CLIENT_READCOLOSE,FD_READ|FD_CLOSE);LRESULT CCDlg::OnReadClose(WPARAM wParam,LPARAM lParam)
    {
    char *buf = new char;
    CString stemp;

    switch (WSAGETSELECTEVENT(lParam))
    {
    case FD_READ:
    if(recv(ClientSocket,(char *)&msg,sizeof(msg),0) != SOCKET_ERROR)
    {收取信息}

    break;
    case FD_CLOSE:
                      断线处理
    break;
    }
    return 0L;
    }
    获取网络状态,可以查出断线,关闭等网络异常
      

  2.   

    其实CSOCKET就有这个功能吧!在客户端断开后服务器端就会触发OnClose的,这时不就知道了吗??!!什么情况都是这样的。不管是断电还是端网!