本帖最后由 VisualEleven 于 2010-12-08 15:54:05 编辑

解决方案 »

  1.   

    本帖最后由 VisualEleven 于 2010-12-08 15:53:24 编辑
      

  2.   


    BOOL Udp::SetMulticast(PCSTR textIP)
    {
    int error = 0;
    int i_val = 0; // 设置多播和广播
    if ( IN_MULTICAST(ntohl(inet_addr(textIP))) )
    {
    i_val = 1;
    error =  setsockopt(m_Socket, IPPROTO_IP, IP_MULTICAST_LOOP, (char*)&i_val, sizeof(i_val) );
    if (error == SOCKET_ERROR)
    {
    ReportError();
    return FALSE;
    }

    ip_mreq multicastAddr;
    multicastAddr.imr_multiaddr.s_addr = inet_addr(textIP);
    multicastAddr.imr_interface.s_addr = htonl(INADDR_ANY);

    error = setsockopt(m_Socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&multicastAddr, sizeof(multicastAddr));
    if (error == SOCKET_ERROR)
    {
    ReportError();
    return FALSE;
    }
    }

    //设置广播
    if ( inet_addr(textIP) == INADDR_BROADCAST )
    {
    i_val = 1;
    error = setsockopt( m_Socket, SOL_SOCKET, SO_BROADCAST, (char*)&i_val, sizeof(i_val) );
    if (error == SOCKET_ERROR)
    {
    ReportError();
    return FALSE;
    }
    }
    return TRUE;
    }