我的系统有3个活动网络接口:
我正在尝试在所有接口上设置一个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运行一项服务(称为SSDPSRV),侦听端口1900上的SSDP广播。这可能会“吞下”数据报,以便它们不会被传送到我的进程吗?如果是这样,我能做些什么吗?
由于