我有幾個局域網(10.0.0.x)連接到廣域網(192.168.1.x)。每個通過允許網絡定向廣播的路由器。這是爲了讓局域網中的設備能夠被廣域網上的設備發現。C#套接字網絡定向廣播
我可以在局域網(10.0.0.255)上發送廣播並在我的套接字上接收它。但是當我移動到廣域網時,我可以在wireshark中看到它,但不能看到我的套接字。換句話說,我有一個地址爲10.0.0.1的設備通過網關發送相同的消息到192.168.1.255,但是我的套接字沒有收到它。發生這種情況時,源地址是路由器的地址。這裏是我的插座代碼:
udpSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
//Assign the any IP of the machine and listen on port number 5000
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 5000);
//Bind this address to the server
udpSocket.Bind(ipEndPoint);
IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 5000);
//The epSender identifies the incoming clients
EndPoint epSender = (EndPoint)ipeSender;
//Start receiving data
udpSocket.BeginReceiveFrom(byteData, 0, byteData.Length,
SocketFlags.None, ref epSender, new AsyncCallback(ReceiveAnnounce), epSender);
我有每條消息wireshark跟蹤,但我不知道發佈它的最佳方式。謝謝。
我明白UDP的作用,但我確實需要一個廣播,而不是多播。這被用來發現局域網後面的控制器和路由器。這就是爲什麼我需要廣播到廣域網。我沒有發送像這樣的數據,只是一條公告消息。 –
這並沒有改變你沒有連接到多播組這點,這是UDP的必要部分(否則你的數據包會伴隨着每個其他UDP數據包通過你的網卡)。 http://en.wikipedia.org/wiki/Multicast – Robadob
我想我很困惑。如果它來自同一個局域網,我創建的套接字將接收到該消息。在這兩種情況下,我都將消息發送到廣播地址,並且沒有設置多播組。我相信端口可以阻止它接收所有的UDP數據包,但我猜測它有可能接收端口上的所有UDP數據。 –