多播的步骤

1.创建socket
    socketfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (-1 == socketfd)
    {
        perror("Opening socket");
        exit(EXIT_FAILURE);
    }
2.设置socket可重用并绑定
    loop = 1;
    if (setsockopt(socketfd, SOL_SOCKET, SO_REUSEADDR, &loop, sizeof(loop)) < 0)
    {
        perror("setsockopt: SO_REUSEADDR");
        exit(EXIT_FAILURE);
    }
 

    if (bind(socketfd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
    {
        perror("bind");
        exit(EXIT_FAILURE);
    }
 
3.设置多播地址并加入多播组
struct ip_mreq command;
 
loop = 1;
    if (setsockopt(socketfd, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) < 0)
    {
        perror("setsockopt: IP_MULTICAST_LOOP");
        exit(EXIT_FAILURE);
    }

    command.imr_multiaddr.s_addr = inet_addr("224.0.0.1");
    command.imr_interface.s_addr = htonl(INADDR_ANY);
    if (command.imr_multiaddr.s_addr == -1)
    {
        perror("224.0.0.1 not a legal multicast address.");
        exit(EXIT_FAILURE);
    }

    if (setsockopt(socketfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &command, sizeof(command)) < 0)
    {
        perror("setsockopt: IP ADD_MEMBERSHIP");
    }
 
 
4.退出多播组
 if (setsockopt(socketfd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &command, sizeof(command)) < 0)
    {
        perror("setsockopt: IP_DROP_MEMBERSHIP");
    }

    close(socketfd);

你可能感兴趣的:(多播的步骤)