2013-08-01 8 views
5

piszę programu przy użyciu udp segmentu broadcast.Code następująco:UDP Broadcast sendto nie powiodło się: "Sieć jest nieosiągalny" na 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"); 

wyjściowy:

sendto failed: Network is unreachable 

ale kiedy uruchom polecenie "dodaj domyślną bramę", np. "route add default gw 10.10.10.111", błąd zniknie. Gdy ustawisz nowy adres ipad na netdev, polecenie jak wyżej powinno zostać uruchomione, w przeciwnym razie pojawi się błąd. Czemu? Dzięki.

Odpowiedz

0

Nie wiem, dlaczego 255.255.255.255 nie działa dla Ciebie. Jednak nigdy nie używałam tego jako własnego IP. Kiedy wysyłam pakiet emisyjny, zazwyczaj uzyskuję adres IP transmisji z mojej maski podsieci, tzn. Jeśli twoja maska ​​podsieci wynosi 255.255.255.0 (/ 24) i mówisz, że twoje IP to 192.168.0.5, wtedy, aby wysłać transmisję UDP, twoje docelowe IP powinno być 192.168.0.255.

Powiązane problemy