UDP 广播在桌面客户端中失败
UDP broadcast fails in desktop client
我正在尝试使用 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 侦听器,但是当 ip 设置为 255.255.255.255 进行广播时,我没有看到侦听器接收(另一台 PC)消息也不在 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 发送消息时,我在 wire shark 上看不到任何数据包。
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 handles 255.255.255.255 broadcast in a different way
我们需要绑定到 windows 7 或更高版本中的本地 IP 地址。
我正在尝试使用 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 侦听器,但是当 ip 设置为 255.255.255.255 进行广播时,我没有看到侦听器接收(另一台 PC)消息也不在 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 发送消息时,我在 wire shark 上看不到任何数据包。
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 handles 255.255.255.255 broadcast in a different way
我们需要绑定到 windows 7 或更高版本中的本地 IP 地址。