我一直试图弄清楚为什么在Windows上使用UDP通信的Java程序可以100%正常工作,但似乎经常在JVM(8.x)的macOS构建上丢弃数据包。
我看见 StackExchange上的另一个线程 这从来没有真正回答过,但似乎其中一个人也注意到了OSX上的类似问题。
我没有在首选项中启用标准防火墙,也不相信我有任何特殊的网络设置会中断UDP数据报。同样,如果我在同一硬件上通过VirtualBox在Windows 7 VM上运行相同的程序,程序运行正常。
关于要寻找什么或者这是一个已知问题的任何想法?
更新2018-11-24: 更多细节。我在MacPro3,1和macOS 10.13.6上运行Java 1.8.0_92-b14。我正在运行的程序是 ADTPro 2.0.2 作为一个以太网服务器试图与一个旧的Apple // e进行通信 Uthernet II 运行ADTPro的另一端。它是将磁盘映像传输到机器或从机器传输磁盘映像的软件。
问题是传输经常超时和中止,并且看起来数据包丢失并且代码不够复杂,无法纠正错误并重新发送/重试。看一下源代码,看来一切都在UDP中,这肯定会引起怀疑。 根据维护者的说法 在GitHub上,它使用UDP的事实是历史性的,没有人做过将其转换为TCP的工作。鉴于该软件可以很好地与具有相同软件和Java版本的Windows机器通信,我猜它是与macOS或OSX Java构建的东西,并询问是否有人知道如何确定或否则。这有帮助吗?