我正在尝试使用C#中的UDP客户端在网络中发送广播消息,但是我看不到网络中任何侦听器客户端收到的消息,该如何解决?
我试图与未知的IP(微控制器设备)/ PC通信,因此我在UDP广播上使用广播专有消息。我需要获取远程设备的静态IP,因此我正在使用广播。
发件人代码
public function attach(EventManagerInterface $events, $priority=1)
{
$this->listeners[] = $events->getSharedManager()->attach('*', 'offerChange', [$this, 'onOfferChange']);
}
我使用了Microsoft网站上的代码,并将IP修改为255.255.255.255,但是当我使用IP 192.168.2.255(路由器IP 192.168.2.1)时,设备(基于微控制器的设备)会响应,我也用UDP检查了网络中另一台PC上的侦听器,但是当ip设置为255.255.255.255进行广播时,我看不到监听器接收到的消息(另一台PC)也在wireshark上。 为了进行实验,我关闭了路由器,并连接了PC(发送器)和PC(监听器)以进行切换,但是在侦听器上没有收到消息。
当我将设备(微控制器设备)直接连接到PC时,它可以同时在255.255.255.255和192.168.2.255上工作。我不了解如何在设备处于网络状态时进行故障排除,以及为什么广播无法在网络中运行。
需要解决此问题的帮助吗?如果不清楚,请通知编辑1:我将代码从微控制器更改为输出sendto(255.255.255.255) 现在,当我使用定向广播(192.168.2.255)时,既可以看到来自应用程序的传出消息,也可以看到来自线鲨的来自应用程序的传入消息(来自MCU(255.255.255.255))
但是当我在应用程序上使用IP 255.255.255.255发送消息时,丝鲨上没有任何数据包。
Edit2:但是,我相信C#或Windows阻止了UDP广播,因此我在Win7和Win10上尝试了该应用程序。
答案 0 :(得分:0)
// creat local endpoint on local ip to bind socket
IPEndPoint localEP = new IPEndPoint(localBind, 32350);
s.Bind(localEP); // need to bind to a local IP address
在该线程Windows 7 handles 255.255.255.255 broadcast in a different way中提到的
我们需要绑定到Windows 7或更高版本中的本地IP地址。