在macOS上是否破坏了Java UDP通信?


1

我一直试图弄清楚为什么在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构建的东西,并询问是否有人知道如何确定或否则。这有帮助吗?


你能进一步描述这个问题吗?问题只是丢包吗?丢包多少钱?哪种接口? (以太网?)您可以通过数据包跟踪验证数据包丢失吗? (Wireshark,tcpdump等)你正在运行哪个JVM? (供应商和版本)
jksoegaard

你怎么衡量?
Buscar웃

提供了更多信息。
bjb

Answers:


0

否 - 在macOS(或任何其他AppleOS)上没有从根本上打破UDP

由于UDP是单播数据包,也称为不可靠的数据包,我首先要解决的问题是确定交换机和路由器实际上是将数据包传送到macOS接口。

您的网络上的Wireshark或管理工具将记录这些数据包以查看它们是否正在交付。

我不担心有人说TCP比UDP更可靠或更不可靠,因为UDP的良好实现比糟糕的实现更好,而且你正在关注特定的Java应用程序,该应用程序在特定的Mac上消耗数据你的网络。很多细节都很好,但是当你真正需要知道司机是否在你的街道上行驶时,它有点像详细说明轮胎的压力和油漆的颜色。

您是否能够运行Wireshark并验证数据包或访问网络日志以验证发件人,还可能需要对UDP进行一些研究,并询问后续问题是否实际上更多是关于网络。


我可以获得很多数据包,因为它可以随机工作一段时间,但之后它就会在某个时刻退出,我不得不等待软件意识到通信存在差距并重置自身。当然,听起来软件应该受到责备,因为它没有良好的错误处理(因此我认为它只是需要用TCP重写以避免这种问题),但令人困惑的部分是同一个盒子上的Windows JVM没有表现出同样的问题。
bjb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.