我在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请求来自?
答案 0 :(得分:0)
注意IP与网络适配器不同的事实。网络适配器可以有多个IP。相反的情况也是可能的,例如,用树干。
当您bind()
时,网络堆栈将根据接口的现有IP地址决定使用哪个网络接口。如果使用0.0.0.0,则对所有接口进行绑定(如果是connect()
,则基于网络堆栈路由表进行绑定)。
无论如何:如果你想获得广播消息,你必须绑定到0.0.0.0,否则你将只获得与特定IP相关的流量。