我们的项目需要使用具有静态 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
提前致谢