我的服务器采用多播数据客户端接受多播数据,后来客户要求增加一块网卡上网, 当上网的网卡被启用,我的程序就无法接受来自服务器的数据, 我该怎么做?

解决方案 »

  1.   

    daphant(feifei):客户端也需要用 bind吗?
      

  2.   

    m_MultiGroupSock[iVideo]= WSASocket(
      AF_INET , 
                      SOCK_DGRAM ,
                      0 ,
                      NULL,
                      0,
                      WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF); if (m_MultiGroupSock[iVideo]==INVALID_SOCKET)
    {
    WSACleanup();
    return false;
    }//绑定本定一个IP地址
    // struct sockaddr_in local;
    //// DWORD dwInterface= INADDR_ANY;
    //
    //
    //    local.sin_addr.s_addr = inet_addr(m_sInterface);
    //    local.sin_port=htons(iPort);
    //    local.sin_family=AF_INET;
    //
    // bind(m_MultiGroupSock[iVideo], (struct sockaddr *)&local, sizeof(local));//设置异步模式
    if(WSAAsyncSelect(m_MultiGroupSock[iVideo], m_hWnd , IP_MULTIGROUP_EVENT, FD_CONNECT |FD_CLOSE | FD_WRITE | FD_READ )==SOCKET_ERROR )
        {
            closesocket(m_MultiGroupSock[iVideo]);
            WSACleanup();
            return false;
        }
        //加入多播组
        m_MultiGroupIP[iVideo].sin_addr.s_addr = inet_addr(m_MulticastIP);
        m_MultiGroupIP[iVideo].sin_port=htons(iPort);
        m_MultiGroupIP[iVideo].sin_family=AF_INET;/* CString s;
    s.Format("IP:%s Port:%d", m_MulticastIP, iPort);
    MessageBox(s);
    */
        if(WSAJoinLeaf(m_MultiGroupSock[iVideo], (struct sockaddr FAR * )&m_MultiGroupIP[iVideo], sizeof(sockaddr),
    NULL, NULL, NULL, NULL, JL_RECEIVER_ONLY) == INVALID_SOCKET)
        {
            closesocket(m_MultiGroupSock[iVideo]);
            WSACleanup( );
            return false;    }
      

  3.   

    如果只有一个IP地址,可以不用,多个IP地址要的
      

  4.   

    ----------------对上面源代码的说明-----------m_sInterface 是我从ini文件读取得一个ip地址,也就是我要用的那块网卡的ip地址 (这块网卡接受服务器的多播数据)我这样做对吗?刚刚我看了几篇文章,说只有服务器进程需要bind
      

  5.   


    ----------------提问------------------ struct sockaddr_in local;  //这里能用 局部变量吗?
    // DWORD dwInterface= INADDR_ANY; //这句话和指定一个ip地址有什么不同吗?
       local.sin_addr.s_addr = inet_addr(m_sInterface); //
        local.sin_port=htons(iPort);
        local.sin_family=AF_INET;

    bind(m_MultiGroupSock[iVideo], (struct sockaddr *)&local, sizeof(local));
      

  6.   

    先枚举一下所有的IP地址,然后绑定bind到一个固定的IP上就可以了
      

  7.   

    INADDR_ANY  有问题哟,你是不是两网卡一个连外网,一个连内网,不要用
    INADDR_ANY,具体指定一个ip吧。(好象是这样)
      

  8.   

    对你的问提很赶兴趣,我还没遇到过,可不可以发送过来一起探讨:[email protected]