我在C#中使用套接字来侦听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);
问题是,当我使用"0.0.0.0"的其他IP时,我不会得到广播消息。
但我想将Soket限制为一个特定的网络适配器,而不是Ip。这可能吗?
编辑:
或者至少,是否可以从适配器中检测到UPD请求的来源?
请注意,IP与网络适配器不同。一个网络适配器可以有多个IP。反之亦然,例如树干
当您bind()
时,网络堆栈会根据接口的现有IP地址决定使用哪个网络接口。如果使用0.0.0.0,则对所有接口进行绑定(如果使用connect()
,则根据网络堆栈路由表进行绑定)
无论如何:如果你想获得广播消息,你必须绑定到0.0.0.0,否则你只会获得与特定IP相关的流量。