gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:08:05 29 4
gpt4 key购买 nike

我正在尝试使用 C# 中的 UDP 客户端在网络中发送广播消息,但我没有看到网络中任何监听器客户端收到的消息,我该如何排除故障?

我正在尝试与未知 IP(微 Controller 设备)/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)时,设备(基于微 Controller 的设备)响应,我还检查了另一个上的 UDP 监听器网络中的 PC,但当 ip 设置为 255.255.255.255 进行广播时,我看不到监听器接收(另一台 PC)消息。
为了进行实验,我关闭了路由器并连接了 PC(发送器)和 PC(监听器)以进行切换,但监听器没有收到任何消息。

当我将设备(微 Controller 设备)直接连接到 PC 时,它适用于 255.255.255.255 和 192.168.2.255。我不明白当设备在网络中时如何进行故障排除以及为什么广播在网络中不起作用。

需要帮助来解决这个问题?如果有任何不清楚的地方,请通知

编辑 1:我将代码从微 Controller 更改为输出 sendto(255.255.255.255)
现在,当我使用定向广播(192.168.2.255)时,我可以看到来自应用程序的传出消息以及传入消息到应用程序(来自 MCU(255.255.255.255))上的 Wireshark

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

Edit2:但是我相信它是阻止 UDP 广播的 C# 或 windows,我在 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 或更高版本中绑定(bind)到本地 IP 地址。

关于c# - 桌面客户端中的 UDP 广播失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57867420/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com