2013-08-01 26 views
5

ben udp broadcast.Code segmentini kullanarak bir programı yazmak linux üzerinde "ağ erişilemiyor":UDP Yayın sento başarısız şu şekildedir: 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"); 

çıkışı:

sendto failed: Network is unreachable 

Ama ne zaman çalıştırmak "varsayılan ağ geçidi" komutunu çalıştırın "yol ekleme varsayılan gw 10.10.10.111" gibi, hata kaybolur. netdev için yeni bir ipaddress ayarı yaparken, yukarıdaki gibi komut çalıştırılmalıdır, aksi halde hata geliyor. Niye ya? Teşekkürler.

cevap

0

255.255.255.255'in neden sizin için çalışmadığından emin değilsiniz. Ancak, bunu hiç bir zaman yayın IP'si olarak kullanmamıştım. Bir yayın paketi gönderdiğimde, genellikle alt ağ maskemden yayın IP'sini türetirim, yani alt ağ maskeniz 255.255.255.0 (/ 24) ise ve IP'niz 192.168.0.5 ise, UDP yayını göndermek için hedef IP'niz olmalıdır. 192.168.0.255.