通讯开始连接时出现装载
  WINSOK 。DLL错误。
其它多个*。DLL 错误。。
为什么。
是以无根形式加入的
但是总不能加入多播组。是不是系统的问题呀。
晕死

解决方案 »

  1.   

    贴上源程序
    是什么问题。
    是不是加入多播组时加入的地址有问题。
    在加入多播时个WSAJoinLeaf()出现问题/
    BOOL CMultiCast::Create(CString lpstrAddr, unsigned short port, HWND hWnd)
    {
    if(m_bConnected)
    {   

    TRACE("Has Successfully Create the socket!\n");
    return FALSE;
    }

    m_hWnd = hWnd; int ret;
                        // 将字符串地址转换为套接字地址
    int iLen = 0;
    int cbRet = 0;
    int nIP_TTL = 16;//设置IP数据生存期
    BOOL bFlag;
    iLen = sizeof(addr); m_hSocket = WSASocket(AF_INET, SOCK_DGRAM, 0, NULL, 0, 
    WSA_FLAG_OVERLAPPED | WSA_FLAG_MULTIPOINT_C_LEAF | WSA_FLAG_MULTIPOINT_D_LEAF);
    if (m_hSocket == INVALID_SOCKET){
    TRACE("WSASocket:%d\n",WSAGetLastError());

    return FALSE;
        }  bFlag = TRUE; // 设置套接字为可重用端口地址
    ret = setsockopt(m_hSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&bFlag,
    sizeof (bFlag));  if(ret == SOCKET_ERROR){
    TRACE("setsockopt:%d",WSAGetLastError());

    return FALSE;
        } 
        // 将套接字绑扎到用户指定端口及默认的接口
        addr.sin_family = PF_INET;
        addr.sin_port = htons (port);
        addr.sin_addr.s_addr = INADDR_ANY;
    ret = bind (m_hSocket, (struct sockaddr FAR *)&addr, 
    sizeof(struct sockaddr));    if (ret == SOCKET_ERROR){
    TRACE("bind: %d", WSAGetLastError());

    return FALSE;
        }
        // 设置多址广播数据报传播范围(TTL)
    ret = WSAIoctl(m_hSocket, SIO_MULTICAST_SCOPE, &nIP_TTL, 
    sizeof (nIP_TTL), NULL, 0, (unsigned long*)&cbRet, NULL, NULL);             
        if (ret == SOCKET_ERROR){
    TRACE("SAIoctl(SIO_MULTICAST_SCOPE):%d\n",WSAGetLastError());

    return FALSE;
    }

    char* chAddr = lpstrAddr.GetBuffer(0);
    ret = WSAStringToAddress(chAddr, AF_INET, 
    NULL, (LPSOCKADDR)&addr, &iLen);          
    if(ret == SOCKET_ERROR){
    m_bConnected = FALSE;
       TRACE("WSAStringToAddress:%d\n",WSAGetLastError());
    return FALSE;
    }
        
    srcaddr = addr;
    srcaddr.sin_port = htons(port);
     
    出错啦--------------》》m_hGroupSocket = WSAJoinLeaf(m_hSocket, (LPSOCKADDR)&addr,
    sizeof(addr), NULL,NULL, NULL, NULL, JL_BOTH);      if (m_hGroupSocket == INVALID_SOCKET){

    m_bConnected = FALSE;
    AfxMessageBox("null");
    TRACE("WSAJoinLeaf():%d\n", WSAGetLastError());
    return FALSE;
        }
    ret = WSAAsyncSelect(m_hGroupSocket, m_hWnd, WM_MULTIPOINTEVENT, 
    FD_WRITE | FD_READ | FD_QOS | FD_GROUP_QOS | FD_CONNECT); if(ret == SOCKET_ERROR){
    TRACE("WSAAsyncSelect():%d\n", WSAGetLastError());
    m_bConnected = FALSE;
    return FALSE;
    }
    m_bConnected = TRUE;
    return TRUE;
    }