更改设备 IP 后,UDP 多播面临问题

更改设备 IP 后,UDP 多播面临问题

我们的项目需要使用具有静态 IP 地址的 Linux 4.1 内核进行 UDP 多播。

使用 sendto 功能发送数据的基本 UDP 多播在设备静态 ip 10.13.204.100 上工作正常,当我将设备的 ip 更改为 10.13.204.101 或同系列中的任何其他 ip 时,问题出现,udp 多播显示错误

sendto: network unreachable

我正在初始化 UDP,如下所示

int udp_init()
{
    char multicastTTL = 10;
    // Create UDP socket:
    memset(&socket_desc, 0, sizeof(socket_desc));
    socket_desc = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (socket_desc < 0)
    {
        perror("socket");
        return 1;
    }
    udp_socket_fd = socket_desc;
    printf("udp_socket_fd=>%d\nsocket_desc==>%d\n", udp_socket_fd, socket_desc);

    /* Set the TTL (time to live/hop count) for the send */
    // if (setsockopt(socket_desc, IPPROTO_IP, IP_MULTICAST_TTL, &multicastTTL, sizeof(multicastTTL)) < 0)
    if (setsockopt(socket_desc, SOL_SOCKET, SO_REUSEADDR, &multicastTTL, sizeof(multicastTTL)) < 0)
    {
        perror("setsockopt");
        exit(1);
    }

    memset(&server_addr, 0, sizeof(server_addr)); /* Zero out structure */
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr(EXAMPLE_GROUP); // INADDR_ANY;
    server_addr.sin_port = htons(EXAMPLE_PORT);             // htons(udp_port);

    // bind to receive address
    //
    if (bind(socket_desc, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
    {
        perror("bind");
        printf("line %s-->%s:%d\n", __FILE__, __FUNCTION__, __LINE__);
        return 1;
    }
}

一旦 IP 更改,我将使用以下命令关闭 UDP 套接字

close(socket_desc)

我再次使用 udp_init 函数初始化 UDP,然后使用 sendto 函数发送数据来传输数据,但我得到sendto:network unreachable

提前致谢

相关内容