本文介绍解决Linux系统下使用255.255.255.255进行广播时遇到Network is unreachable的问题。通过配置路由表后运行应用层会自动删除路由表新添加的内容,结合system系统命令解决问题。
场景:
调试linux 网络编程的广播,当向255.255.255.255 的某个端口发送广播包的时候,sendto 返回 -1,错误原因是:sendto error: Network is unreachable。
解决方法:
1.指令的解决方法:
route add -host 255.255.255.255 dev eth0
2.如果手动添加指令后无法解决,运行应用会自动删除添加的路由表内容,则应用层编程添加:system("route add -host 255.255.255.255 dev eth0"); eth0为当前的网卡名称。如:
/*********初始化udp发送********/
// 创建UDP套接字
if ((g_sendfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("udp socket error!!!");
exit(EXIT_FAILURE);
}
printf("===========opt:%d\n", opt);
opt = 1;
// 设置套接字选项:允许发送广播
if (setsockopt(g_sendfd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(opt)) < 0) {
perror("udp setsockopt error!!!");
exit(EXIT_FAILURE);
}
// 配置发送地址
memset(&send_addr, 0, sizeof(send_addr));
send_addr.sin_family = AF_INET;
send_addr.sin_addr.s_addr = inet_addr(BROADCAST_ADDR); // 使用广播地址
send_addr.sin_port = htons(SEND_PORT);
// 绑定套接字到端口
if (inet_pton(AF_INET, BROADCAST_ADDR, &send_addr.sin_addr) <= 0) {
perror("inet_pton (invalid broadcast address)!!!");
close(g_sendfd);
exit(EXIT_FAILURE);
}
system("route add -host 255.255.255.255 dev eth0");
2047

被折叠的 条评论
为什么被折叠?



