C语言 小代码 UDP组播

实现将本地IP加入指定组播IP中

#include 
#include 
#include 
#include  /* superset of previous */
#include 
#include 
#include 
#include 
#include 

int main()
{
    // 1.创建UDP通信对象
    int udp_socket = socket(AF_INET, SOCK_DGRAM, 0);

    // 2.绑定
    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(8888);
    server_addr.sin_addr.s_addr = INADDR_ANY;
    int ret = bind(udp_socket, (struct sockaddr *)&server_addr, sizeof(server_addr));
    if (ret < 0)
    {
        perror("绑定失败\n");
        return -1;
    }

    /*
struct ip_mreq
{
struct in_addr imr_multiaddr; //组播的IP地址
struct in_addr imr_interface; //需要加入组播的IP地址
}
    */
    // 3.加入组播
    struct ip_mreq mreq;
    mreq.imr_multiaddr.s_addr = inet_addr("224.10.10.10"); // 设置一个组播地址
    mreq.imr_interface.s_addr = INADDR_ANY;                // 把本地所有网卡加入组播地址

    // 开启组播功能
    ret = setsockopt(udp_socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
    if (ret < 0)
    {
        perror("加入组播失败\n");
        return -1;
    }
    else
    {
        printf("加入组播成功\n");
    }

    // 开始接收组播数据
    while (1)
    {
        char buf[1024] = {0};
        int len = recvfrom(udp_socket, buf, sizeof(buf), 0, NULL, NULL);
        printf("len=%d,buf=%s\n", len, buf);
    }
}

如有不懂请往主页查看相应API

你可能感兴趣的:(小代码,c语言,udp,开发语言)