2011-06-09 123 views
4

我想發送UDP廣播,但wireshark沒有報告任何流量。下面是不發送的片段:爲什麼我的UDP廣播失敗?

void SendBroadcast() 
{ 
    String^ ip = "255.255.255.255"; 
    int port = 30718; 
    String^ message = "test"; 

    UdpClient^ udpClient = gcnew UdpClient(); 
    udpClient->EnableBroadcast = true; 
    IPEndPoint^ ipDest = gcnew IPEndPoint(IPAddress::Parse(ip), port); 
    cli::array<unsigned char>^ dgram = Encoding::ASCII->GetBytes(message); 
    int bytesSent = udpClient->Send(dgram, dgram->Length, ipDest); 

    if(bytesSent != message->Length) 
    { 
     // Failed to send 
     Console::WriteLine(String::Format("Error: Failed to send all data (bytes sent: {0})", bytesSent)); 
    } 
    else 
    { 
     Console::WriteLine(String::Format("Bytes sent: {0}", bytesSent)); 
    } 
} 

據報道,它發送的數據(4個字節),那麼爲什麼不看Wireshark的交通?我已經嘗試過在同一端口上廣播的另一個應用程序,並且來自該應用程序的流量顯示正常。

我錯過了什麼?

[編輯]我剛剛在the UdpClient documentation的底部發現了一個帖子,其中指出在windows 7機器上發送到255.255.255.255不起作用。這不可能是作爲一個整體的o/s,或從其他應用程序到255.255.255.255的廣播將失敗?

+0

你是否在廣播域的機器上接收它? – 2011-06-09 09:05:36

+0

我只是看着傳出的流量。如果有效,遠程機器將發送一個響應,該響應也顯示在另一個應用程序的wireshark上。 – 2011-06-09 09:09:38

+0

如果我將廣播地址更改爲我瞄準的範圍(10.10.5.255),它可以正常工作,那麼爲什麼它會失敗255.255.255.255? – 2011-06-09 09:10:20

回答

4

Windows 7以不同的方式處理255.255.255.255廣播。更多的信息在這裏:Send UDP broadcast on Windows 7

+0

所以你說我需要綁定到本地IP地址,以便Windows 7知道要發送哪個適配器? – 2011-06-09 09:41:45

+1

正好,或使用子網廣播,而不是255.255.255.255 – Ladislav 2011-06-09 11:28:21

+0

+1 /接受:我依次綁定到每個本地地址,並對其進行排序:-) – 2011-06-09 11:54:17