C# 桌面客户端中的UDP广播失败

C# 桌面客户端中的UDP广播失败,c#,sockets,udp,desktop-application,broadcast,C#,Sockets,Udp,Desktop Application,Broadcast,我正在尝试使用C#中的UDP客户端在网络中发送广播消息,但我看不到网络中任何侦听器客户端接收到的消息,如何进行故障排除 我试图与未知的IP(微控制器设备)/PC通信,因此我使用UDP广播上的广播专有消息。我需要获得远程设备静态IP,因此我使用广播 发送方代码 IPAddress broadcast = null; Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.

我正在尝试使用C#中的UDP客户端在网络中发送广播消息,但我看不到网络中任何侦听器客户端接收到的消息,如何进行故障排除

我试图与未知的IP(微控制器设备)/PC通信,因此我使用UDP广播上的广播专有消息。我需要获得远程设备静态IP,因此我使用广播

发送方代码


IPAddress broadcast = null;

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

s.EnableBroadcast = true;

// proprietary message for identification 
byte[] sendbuf = {0x5C, 0x45, 0x6D, 0x62, 0x65, 0x64,
            0x4C, 0x6F, 0x67, 0x69, 0x6B, 0x5, 0x6C, 0x73, 0x74, 0x5, 0x4, 0x5};

broadcast = IPAddress.Parse("255.255.255.255");

IPEndPoint ep = new IPEndPoint(broadcast, 1110);

s.SendTo(sendbuf, ep); // send message
我使用了Microsoft站点的代码,并将IP修改为255.255.255.255,但是当我使用IP 192.168.2.255(路由器IP 192.168.2.1)时,设备(基于微控制器的设备)会响应,我还检查了网络中另一台PC上的UDP侦听器,但我看不到侦听器接收(另一台PC)当ip设置为255.255.255.255进行广播时,wireshark上的消息不存在。 为了进行实验,我关闭了路由器,将PC(发送器)和PC(侦听器)连接到交换机上,但侦听器上并没有收到任何消息

当我将设备(微控制器设备)直接连接到PC时,它可以在255.255.255.255和192.168.2.255上工作。我不明白当设备在网络中时如何排除故障,以及为什么广播在网络中不工作

需要帮助来解决这个问题吗?如果任何一点不清楚,请通知

编辑1:我将代码从微控制器更改为输出发送到(255.255.255.255) 现在,当我使用定向广播(192.168.2.255)时,我可以在wire shark上看到来自应用程序的传出消息和来自应用程序的传入消息(来自MCU(255.255.255.255))

但当我在应用程序上使用IP 255.255.255.255发送消息时,我在WireShark上看不到任何数据包

Edit2:不过我相信是C#或windows阻止了UDP广播,我在Win7和win10上都尝试了这个应用程序

    // 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或更高版本中的本地IP地址

如本文所述


我们需要在windows 7或更高版本中绑定到本地IP地址。

您的路由器可能正在阻止包的广播。当路由器接收到一个数据包时,它会被检查,然后转发到适当的接口,或者它会被丢弃。当路由器接收到广播数据包时,它会将其丢弃(不包括定向广播、dhcp等)。@PabloRecalde hi pablo感谢您的回复,我也尝试在没有路由器的情况下关闭路由器的电源,而不仅仅是关闭交换机和PC及设备的连接、PC与交换机的连接以及设备与交换机的连接。然后它也失败了注意一些交换机也会阻止广播我的意思是交换机*你的路由器可能会阻止包的广播。当路由器接收到一个数据包时,它会被检查,然后转发到适当的接口,或者它会被丢弃。当路由器接收到广播数据包时,它会将其丢弃(不包括定向广播、dhcp等)。@PabloRecalde hi pablo感谢您的回复,我也尝试在没有路由器的情况下关闭路由器的电源,而不仅仅是关闭交换机和PC及设备的连接、PC与交换机的连接以及设备与交换机的连接。然后它也失败了注意一些开关也阻止了广播我是说开关*