刚才我好象回答过一次了?!
调用WSAAsyncSelect函数你可以指定系统给你发送什么消息!!!

解决方案 »

  1.   

    请大哥看下面的程序片段:
    if(::WSAAsyncSelect(m_sListen, m_hWnd, WM_SOCKET_CONNECT,FD_ACCEPT)==SOCKET_ERROR)
    {
    m_Err_Message.Format("无法启动IO模块;\n错误码:%d",WSAGetLastError());
    ::MessageBox(m_hWnd,m_Err_Message,"系统错误",MB_OK|MB_ICONSTOP);
    return FALSE;
    }
    listen(m_sListen,10);在此片段中,WSAAsyncSelect()与listen()各起什么作用?
      

  2.   

    其中自定义消息WM_SOCKET_CONNECT的响应函数为:
    void CSendView::OnConnect(WPARAM wparam, LPARAM lparam)
    {
    pFrame->m_wndStatusBar.SetPaneText(1,_T("客户机正在连接我端服务器..."));
    //响应客户连接
    SOCKET sServer=(SOCKET)wparam;
    int nErrorCode = HIWORD(lparam);
    int nMessage = LOWORD(lparam);
    int nLength = sizeof(SOCKADDR_IN);
    SOCKADDR_IN Client_Addr;
    int nIndex;
    CString m_Err_Message;
    CConnect *pClient=new CConnect;
    //保存客户机连接信息
    nIndex=m_Connect.Add(pClient);
    pClient->m_Connect=accept(sServer,(LPSOCKADDR)&Client_Addr,&nLength);
    if(pClient->m_Connect==INVALID_SOCKET)
    {
    m_Err_Message.Format("错误:无法接受客户机连接SOCKET!,\n错误码:",WSAGetLastError());
    AfxMessageBox(m_Err_Message);
    m_Connect.RemoveAt(nIndex);
    return ;
    }
    pClient->m_Address=inet_ntoa(Client_Addr.sin_addr);
    //进行消息队列循环
    ::WSAAsyncSelect(pClient->m_Connect,m_hWnd,WM_SOCKET_READ,FD_READ|FD_CLOSE);
    //创建连接客户端的子线程
    pClient->m_Client=new CClientThread(GetSafeHwnd(),pClient->m_Connect,pClient->m_Address);
    if( pClient->m_Client== NULL )
    {
    ::MessageBox(GetSafeHwnd(),"无法创建连接子线程", "错误", MB_OK|MB_ICONSTOP );
    return ;
    }
    pClient->m_Client->CreateThread();
    pFrame->m_wndStatusBar.SetPaneText(1,_T("连接完毕..."));
    if(!App.Gl_Begin)
    pClient->m_Client->PostThreadMessage(WM_SOCKET_SEND_DATA,(WPARAM)ReturnMessage(),0L);
    }