我在 Windows 桌面上运行了一个 C# 程序,该程序在 UDP 上广播,我在 Raspian Buster 上运行了一个 Java 程序,该程序正在监听广播。两个设备都通过以太网电缆连接到同一个交换机。但是,Java 客户端没有收到广播。
在我搬家并更改网络设置之前,一切都运行正常。
我尝试过的:
台式机的 IP 是 192.168.1.22
树莓派的 IP 是 192.168.1.25
在 Windows 上,调用arp -a
cmd 会显示 Raspberry:
192.168.1.25 b8-27-eb-db-16-f0 动态
在 Raspberry 上,调用arp -a
会显示桌面:
Desktop-so5t7k8-1.home (192.168.1.22) 位于 eth0 上的 70:85:c0:7f:4f [ether]
从桌面 Ping Raspberry 工作正常(无数据包丢失,时间<1ms)
但是,从 Raspberry ping 桌面不起作用——100% 数据包丢失
我意识到这可能是由无数可能的问题引起的,但我不知道从哪里开始。我该如何调试它?
答案1
我该如何着手调试这个问题?
有两件事可以尝试,顺序不限:
防火墙配置。Windows 附带一个防火墙,配置为阻止“新”入站数据包 - 它会提示您一次对于每个尝试侦听数据包的新程序,但如果您匆忙关闭对话框,则很可能会导致 java.exe 被阻止。
运行
wf.msc
以打开 Windows 防火墙配置工具,导航到“入站”规则,并查找任何明确阻止可执行文件的规则。如果找到,请将其更改为“允许”规则,或者删除它并手动添加基于端口的规则。(例如,添加一条规则以允许接收 UDP 到端口 23456。)请记住,某些防病毒程序带有自己的防火墙,并禁用 Windows 附带的防火墙。
数据包捕获。在应该接收数据包的机器上安装 Wireshark,将其指向您的网络接口,使用它来验证系统是否整体接收到您要查找的 UDP 数据包。如果它们出现在数据包捕获中但没有出现在程序中 - 这通常是防火墙问题。如果它们不在数据包捕获中显示 - 这是某种网络问题(例如交换机或 Wi-Fi 接入点阻止广播)。