我的系统有3个活动网络接口:
-
192.168.1.7(无线适配器)
-
192.168.247.1(虚拟VMWare以太网适配器)
-
169.254.54.231(另一个VMWare以太网适配器)
我正在尝试在所有接口上设置一个UDP套接字监听端口1900上的SSDP广播,但是我似乎没有收到所有广播数据报,只有一些 .
这是我的代码:
static void Main(string[] args) {
IPEndPoint broadcastEP =
new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900);
using (var udp = new UdpClient(broadcastEP.Port)) {
udp.JoinMulticastGroup(broadcastEP.Address);
while (true) {
IPEndPoint remoteEP = null;
Console.WriteLine("Listening for data on port " + broadcastEP.Port);
byte[] buffer = udp.Receive(ref remoteEP);
Console.WriteLine("Received " + buffer.Length + " data bytes from " + remoteEP);
}
}
}
如果我现在从另一个进程发送广播数据报,上面的代码应该把它拿起来,对吧?
但是,当我在另一个进程中执行此代码时,第一个进程将只接收广播,如果它是从192.168.1.7接口发送的 . 如果我从其他接口之一发送广播,则第一个进程根本不会接收它 . 我可以看到广播实际上是在Wireshark发送的......我错过了什么吗?
static void Main(string[] args) {
var ifs = new IPAddress[] {
IPAddress.Parse("192.168.1.7"),
IPAddress.Parse("192.168.247.1"),
IPAddress.Parse("169.254.54.231")
};
IPEndPoint broadcastEP =
new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900);
using (UdpClient cli = new UdpClient(new IPEndPoint(ifs[0], 0))) {
IPEndPoint ep = new IPEndPoint(broadcastEP.Address, broadcastEP.Port);
int n = cli.Send(new byte[] { 1, 2, 3, 4 }, 4, ep);
Console.WriteLine("Sent " + n + " bytes to " + ep);
}
}
我知道Windows在端口1900上运行一个服务(称为SSDPSRV)侦听SSDP广播 . 这可能会“吞下”数据报,以便它们不会被传送到我的进程吗?如果是这样,我能做些什么吗?
谢谢