有很多客户端要连接服务器
每个客户端退出时都会触发服务器的FD_CLOSE
但是我在case FD_CLOSE
里面如何判断是哪一个客户端退出了连接呢?
每个客户端有特殊属性,ID

解决方案 »

  1.   

    怎么判断啊给个例子啊
    每个接入的socket在
    void CQqServerDlg::OnSock(WPARAM wParam,LPARAM lParam)
    SOCKET sock = (SOCKET)wParam;//这个参数是发生事件的套接口
    消息响应后都是这个sock啊
      

  2.   

    while(TRUE)

    Index = WSAWaitForMultipleEvents(EventTotal,EventArray,FALSE,WSA_INFINITE,FALSE);//等待网络事件 
    Index = Index - WSA_WAIT_EVENT_0;
    for(i = Index; i < EventTotal; i++)
    {
    Index = WSAWaitForMultipleEvents(1, &EventArray[i], TRUE, 100, FALSE);
    if ((Index == WSA_WAIT_FAILED) || (Index == WSA_WAIT_TIMEOUT))
    {
    continue;
    }//endif 
    else
    {
    Index = i;
    WSAEnumNetworkEvents(SocketArray[Index], 
    EventArray[Index], 
    &NetWorkEvents);
                            if (NetWorkEvents.lNetworkEvents & FD_CLOSE)
    {
    if (NetWorkEvents.iErrorCode[FD_CLOSE_BIT] != 0)
    {
    printf("FD_CLOSE failed with error %d \n",
    NetWorkEvents.iErrorCode[FD_CLOSE_BIT]);
    //break;
    }//endif
    MySockList del;
    del.s = SocketArray[Index];
    FindList(L, del);
                            }
                     }
             }
    }
    看的明白不?
      

  3.   

    每次有一个SOCKET接入就将SOCKET保存在SOCKET数组中,在这个数组中查找跟现在接入的一样就知道哪个客户端退出了.