2014-06-24 40 views
1

我有這件怪事:UDP廣播不被特定的場合發出

這是我設置了廣播UDP套接字:

int broadcast_enable = 1; 
int my_socket; 

if ((my_socket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { 

    fprintf(stderr, "ERROR socket\n"); 
    return 0; 
} 

memset(&my_addr, '\0', sizeof(my_addr)); 
my_addr.sin_family = AF_INET; 
my_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST); 
my_addr.sin_port = htons(20007); 

setsockopt(my_socket, SOL_SOCKET, SO_BROADCAST, &broadcast_enable, sizeof(broadcast_enable)); 

這是我發送消息通過這個插座:

int len = sizeof(my_addr); 
char buff; 

buff = 'b'; 

if (sendto(my_socket, &buff, sizeof(buff), 0, (struct sockaddr*)&my_addr, len) < 0) { 

    fprintf(stderr, "ERROR sendto\n"); 
    return 0; 
} 

我把WireShark放在發送計算機上,並聆聽wifi接口。
1.當我連接到網絡「A」我可以查看消息被從發送方發送的。
2.當我連接到網絡「B」我不能看到從發送者發送的消息。

  • 其他廣播消息正在網絡「B」(由其他應用程序)發送和接收。
  • 發件人在網絡'B'中有靜態IP。我改變它是非靜態的,我看到了消息被髮送。過了一段時間,我再次嘗試,並沒有發送消息。我無法指出發生的變化。

它搖鈴給任何人?
請告訴你是否需要任何進一步的信息。

回答

1

您可能使用的Wireshark錯,例如,在尋找一個錯誤的I/F或錯誤地濾波的結果。 確保正確,或者更好的使用它,嘗試tcpdump的,以確保您的包確實不被髮送:

sudo tcpdump -i any -n udp 
+0

我沒有過濾器,同時想看看包。我會嘗試'tcpdump'也 – hudac

+0

好,wireshark沒有顯示真正的捕獲,謝謝! – hudac

1

您還沒有指定的數據包發送給哪個接口。廣播數據包仍然只發送到一個接口。

如果我沒有記錯,爲255.255.255.255默認是使用默認路由的接口。如果您在其中一個接口上使用其中一個子網廣播地址,則會選擇該接口;或者,您可以通過套接字選項明確選擇一個。