在特定的网络适配器上收听所有UPD请求

时间:2016-05-30 06:49:38

标签: c# sockets udp

我在C#中使用Socket来收听UPD请求

var bindIp = IpAddress.Parse("0.0.0.");
var ipLocalEndPoint = new IPEndPoint(bindIp, PORT_TO_LISTEN_TO);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.Bind(ipLocalEndPoint);

问题是,当我使用anthoer IP作为“0.0.0.0”时,我没有收到广播消息。

但我想将Soket限制为一个特定的网络适配器,而不是Ip。这可能吗?

编辑:

或者至少,是否有可能从适配器检测到UPD请求来自?

1 个答案:

答案 0 :(得分:0)

注意IP与网络适配器不同的事实。网络适​​配器可以有多个IP。相反的情况也是可能的,例如,用树干。

当您bind()时,网络堆栈将根据接口的现有IP地址决定使用哪个网络接口。如果使用0.0.0.0,则对所有接口进行绑定(如果是connect(),则基于网络堆栈路由表进行绑定)。

无论如何:如果你想获得广播消息,你必须绑定到0.0.0.0,否则你将只获得与特定IP相关的流量。