我有几个局域网(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数据。 –