2013-08-01 35 views
5

tôi viết một chương trình sử dụng phân khúc broadcast.Code udp như sau:UDP Broadcast sendto thất bại: "mạng là unreachable" trên 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"); 

đầu ra:

sendto failed: Network is unreachable 

Nhưng khi tôi chạy lệnh "add default gateway" như "route add default gw 10.10.10.111", lỗi biến mất. Khi thiết lập ipaddress mới thành netdev, lệnh như trên sẽ được chạy, nếu không thì lỗi sẽ xuất hiện. Tại sao? Cảm ơn.

Trả lời

0

Không chắc chắn tại sao 255.255.255.255 không hoạt động cho bạn. Tuy nhiên, tôi chưa bao giờ sử dụng nó như là một IP phát sóng bản thân mình. Khi tôi gửi một gói phát sóng, tôi thường lấy IP phát sóng từ mặt nạ mạng con của tôi, tức là nếu mặt nạ mạng con của bạn là 255.255.255.0 (/ 24) và nói IP của bạn là 192.168.0.5, sau đó gửi truyền phát UDP, IP đích của bạn phải là 192.168.0.255.

Các vấn đề liên quan