在我的程序里
CSocket _socket;
_socket.Create();
……如果在_socket.Create()之前不调用一次AfxSocketInit()这个函数的话Create()这会失败但我看我在网上下回来的SMTP的程序好像就没有调用AfxSocketInit()这个函数也能使用CSocket通讯呀!这个AfxSocketInit()是不是一定要的呀?什么情况下可以不用呢?

解决方案 »

  1.   

    AfxSocketInit() 做了
    下面的东西,你觉得去掉能用CSocket吗?WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD( 2, 2 );

    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 ) {
    /* Tell the user that we could not find a usable */
    /* WinSock DLL.                                  */
    return FALSE;
    }
      

  2.   

    mfc 里面的源代码! SOCKCORE.CPP 文件中!BOOL AFXAPI AfxSocketInit(WSADATA* lpwsaData)
    {
    _AFX_SOCK_STATE* pState = _afxSockState.GetData();
    if (pState->m_pfnSockTerm == NULL)
    {
    // initialize Winsock library
    WSADATA wsaData;
    if (lpwsaData == NULL)
    lpwsaData = &wsaData; WORD wVersionRequested = MAKEWORD(1, 1);
    int nResult = WSAStartup(wVersionRequested, lpwsaData);
    if (nResult != 0)
    return FALSE; if (LOBYTE(lpwsaData->wVersion) != 1 || HIBYTE(lpwsaData->wVersion) != 1)
    {
    WSACleanup();
    return FALSE;
    } // setup for termination of sockets
    pState->m_pfnSockTerm = &AfxSocketTerm;#ifndef _AFXDLL
    // setup maps and lists specific to socket state
    _AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
    if (pState->m_pmapSocketHandle == NULL)
    pState->m_pmapSocketHandle = new CMapPtrToPtr;
    if (pState->m_pmapDeadSockets == NULL)
    pState->m_pmapDeadSockets = new CMapPtrToPtr;
    if (pState->m_plistSocketNotifications == NULL)
    pState->m_plistSocketNotifications = new CPtrList;
    #endif
    } return TRUE;
    }