void CServerSocket::OnAccept(int nErrorCode) 
{
CClientSocket* pClientSocket = new CClientSocket(&m_ConnectList);
Accept(*pClientSocket); pClientSocket->m_pChatServerDlg = (CChatServerDlg*)::AfxGetMainWnd(); // 绑定窗口 m_ConnectList.AddTail(pClientSocket); // 压入一个连接
CSocket::OnAccept(nErrorCode);
}
Accept(*pClientSocket); 这句有什么作用?
网上查了好多,没什么收获。(代码贴的应该够吧?)

解决方案 »

  1.   

    有客户端连接后,服务器端需要调用accept来获取连接来的socket的
      

  2.   

    网上应该又很多资料的。你查的不对吧
    你这个CServerSocket肯定是继承了CSocket(或CAsyncSocket)而来,所以你需要查"CSocket Accept"其实也蛮简单的,它会把新连接的socket对象赋值给你传递进去的这个socket的引用。
    书上很误导人的,记得检测返回值。
      

  3.   


    Accept(*pClientSocket);
    这句是不是记录相关数据给pClientSocket??
      

  4.   


    Accept(*pClientSocket);
    这句单步调试了一下,还是不知道有什么作用,因为那个“while (!CAsyncSocket::Accept(rConnectedSocket, lpSockAddr, lpSockAddrLen))”语句也未被执行。
    就是说这个函数调用了和没调用似乎是一样的。究竟是何作用呢?
      

  5.   


    也不准备用MFC的这个CSocket类,无奈书上是用这个做例子的,得看懂才行。自己准备用win32的sock重新实现。
      

  6.   

    Accept(*pClientSocket);
    的意思是C/S在这个pclientsocket上建立了连接,以后就可以在pClientSocket上进行通讯了,
      

  7.   

    CSocket不是线程安全的,
    实际开发中基本不用....
      

  8.   

    这本书没有看过。不过你可以把Accept理解成一个阻塞似的函数,只要调用了Accept程序就会卡在那里不动,但不占用CPU资源,只有当新连接到达并符合Server Socket的端口要求时,就会被接受(就是这个Accept),然后Accept()返回,然后把它加进m_ConnectList(是个CPtrList)中。这样While继续循环继续Accept()等待下一个连接的到来。
      

  9.   


    那这个Accept函数在执行期间,会不会触发OnRecieve()函数?
      

  10.   

    mfc自己搞的东西,查msdn就好了
      

  11.   

    只有先accept了才可能触发receive