2013-08-01 253 views
5

我寫使用UDP broadcast.Code段的程序如下:UDP廣播的sendto失敗: 「網絡不可達」 在Linux 2.6.30

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時,應該運行上面的命令,否則會出現錯誤。爲什麼?謝謝。

回答

0

不知道爲什麼255.255.255.255不適合你。但是,我從來沒有把它當作廣播IP使用。當我發送廣播數據包時,我通常從我的子網掩碼中獲取廣播IP,即如果您的子網掩碼爲255.255.255.0(/ 24)並且表示您的IP爲192.168.0.5,則發送UDP廣播時,您的目標IP應爲192.168.0.255。