多播的步骤

    技术2022-05-19  21

    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);


    最新回复(0)