UDP广播发送失败:linux 2.6.30上的“网络无法访问”

时间:2013-08-01 03:42:53

标签: linux sockets udp

我使用udp broadcast.Code段编写程序如下:

struct sockaddr_in broadcast_addr;
socklen_t sock_len=sizeof(broadcast_addr);

bzero(&broadcast_addr,sock_len);
broadcast_addr.sin_family=AF_INET;
broadcast_addr.sin_port=12345;
broadcast_addr.sin_addr.s_addr=inet_addr("255.255.255.255");

int fd=socket(AF_INET,SOCK_DGRAM,0);
int broadcast_enable=1;
setsockopt(fd,SOL_SOCKET,SO_BROADCAST,&broadcast_enable,sizeof(broadcast_enable));

uint8_t send_buf[100];
int ret=sendto(fd,send_buf,sizeof(send_buf),0,
       (struct sockaddr*)&broadcast_addr,sock_len);

 if(ret==-1)
    perror("sendto failed");

输出:

sendto failed: Network is unreachable

但是当我运行"添加默认网关"像" route add default gw 1​​0.10.10.111",错误消失。当将新的ipaddress设置为netdev时,应该运行上面的命令,否则会出现错误。为什么?感谢。

1 个答案:

答案 0 :(得分:0)

不确定为什么255.255.255.255不适合您。但是,我自己从未将其用作广播IP。当我发送广播数据包时,我通常从子网掩码中获取广播IP,即如果您的子网掩码是255.255.255.0(/ 24)并且说您的IP是192.168.0.5,那么要发送UDP广播,您的目标IP应该是192.168.0.255。