在多播中,要接受多播数据,要求接收主机必须加入主机组(224.0.0.1),即启动IGMP协议,请问如何加入主机组(224.0.0.1)。我看到有些程序的源吗都是很低端的底层源吗,
请问有简单的  API  函数可用吗?

解决方案 »

  1.   

    WSAData wsaData;    if( WSAStartup(MAKEWORD(2,2), &wsaData) != 0 )
        {
                  return 0;
        }
        
        server = socket(AF_INET, SOCK_DGRAM, 0); 
        
    if (server == INVALID_SOCKET)
    {
    AfxMessageBox (" ");
                      return 0;
    }    const int routenum = 32;
        int ret = setsockopt(server,IPPROTO_IP,IP_MULTICAST_TTL,
                   (char*)&routenum,sizeof(routenum));    if( ret == SOCKET_ERROR )
        {
            AfxMessageBox("Error in setsockopt");
            return 0;
        }   
        const int loopback = 0;
        ret = setsockopt(server,IPPROTO_IP,IP_MULTICAST_LOOP,
                   (char*)&loopback,sizeof(loopback));
        if( ret == SOCKET_ERROR )
        {
           AfxMessageBox("Error in setsockopt(IP_MULTICAST_LOOP): ");
           return 0;
        }    
        memset(&local, 0, sizeof(local));
        local.sin_family = AF_INET;
        local.sin_port = htons(MULTICAST_PORT);
        local.sin_addr.S_un.S_addr = INADDR_ANY;
       
    ret = bind(server, (sockaddr*)(&local), sizeof(local));
        if( ret == SOCKET_ERROR )
        {
            AfxMessageBox("Error in bind: ");
            return FALSE;
        }
       //下面应该就是 加入了 
        memset(&mreq, 0, sizeof(mreq));
        mreq.imr_interface.S_un.S_addr = INADDR_ANY;
        mreq.imr_multiaddr.S_un.S_addr = inet_addr("224.0.0.99");
        
        ret = setsockopt(server,IPPROTO_IP,IP_ADD_MEMBERSHIP,
                   (char*)&mreq,sizeof(mreq));    if( ret == SOCKET_ERROR )
        {
                   AfxMessageBox("Error in setsockopt(IP_ADD_MEMBERSHIP): ");
        }
     
      

  2.   

    读读<<Windows网络编程技术>>,读完后很多网络方面的基础问题都可以自己解决了。
      

  3.   

    mreq.imr_interface.s_addr = inet_addr("127.0.0.1");
    mreq.imr_multiaddr.s_addr = inet_addr("234.5.6.7");
    setsockopt(s,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mreq,sizeof(mreq));
      

  4.   

    codeguru 有个多播类
    http://www.codeguru.com/Cpp/I-N/network/winsocksolutions/comments.php/c2457/?thread=32108
      

  5.   


    mreq.imr_interface.s_addr = inet_addr("127.0.0.1");
    mreq.imr_multiaddr.s_addr = inet_addr("234.5.6.7");
    setsockopt(s,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mreq,sizeof(mreq));