我对整个UDP事物都很陌生(因为每个人都喜欢TCP),并且需要问一些关于Java实现的问题。
我需要有人告诉我是否:
我担心Java会无声地丢弃它,或者数据没有正确排列......这意味着我必须实现一种伪TCP类的东西才能同时拥有UDP的好处,以及检查TCP。
答案 0 :(得分:2)
UDP在很大程度上是在操作系统中实现的,Java在这个问题上几乎没有发言权。
Java没有办法,或者您无法判断这些是否已经发生。
您可以做的是实施协议来检测这一点。例如在每个数据包的开头添加序列号,长度和校验和。
这意味着我必须实现一个伪TCP类的东西,既有UDP的好处,也有TCP的检查。
现在你开始明白为什么“每个人都喜欢TCP”或大多数人都喜欢。 UDP有其用途,但对于大多数应用程序,TCP是最简单的。
答案 1 :(得分:1)
由于网络配置和数据大小,Java发送的DatagramPackets会自动分段。
是的,但Java与它无关。
在receive()调用返回结果之前,由于网络配置和数据大小而自动分段后,DatagramPackets被重新排列为Java正确的片段顺序。
是的,但不是Java,只有当所有碎片到达时。这发生在IP层。
如果删除了未完成的碎片化DatagramPackets,或者在删除时生成异常。 (收到一些碎片,其他碎片丢失)
他们默默地掉下来。没有例外。 Java再次与它无关。这一切都发生在IP层。当且仅当所有片段到达时,数据报被重新组装并传递到UDP层。 Java没有任何参与。
我担心Java会默默地删除它
Java什么都不做。 IP静静地丢弃它。
或数据排列不正确
收到的数据报完整无缺,或者完全没有。 Java再次与它无关。
这意味着我必须实现一个伪TCP类的东西,既有UDP的好处,也有TCP的检查。
正确。你这样做。