我是整个 UDP 的新手(因为每个人都喜欢 TCP),需要问几个关于 Java 实现的问题。
我需要有人告诉我是否:
- Java发送的DatagramPackets由于以下原因自动分片 网络配置和数据大小。
- DatagramPackets 在由于网络配置和数据大小而自动分片后由 Java 重新排列为正确的分片顺序...在 receive() 调用返回结果之前。
- 如果不完整的碎片化 DatagramPackets 被丢弃或在丢弃时产生异常。 (一些碎片收到了,其他碎片丢失了)
我担心 Java 会悄无声息地丢弃它,或者数据没有正确排列...这意味着我必须实现一种伪 TCP 类的东西,才能既有 UDP 的好处,又能检查TCP。
最佳答案
UDP 主要在操作系统中实现,Java 在这方面几乎没有发言权。
- 长度超过576字节的数据包可以被分片;
- 数据包可能会丢失;
- 数据包可能会乱序到达。
Java 没有办法,或者你来判断这些是否已经发生。
您可以做的是实现一个协议(protocol)来检测这一点。例如在每个数据包的开头添加序列号、长度和校验和。
which would mean that I have to implement a pseudo TCP kind of thing to have both the benefits of UDP, as well as the checking of TCP.
现在您开始理解为什么“每个人都喜欢 TCP”或大多数人都喜欢。 UDP 有其用途,但对于大多数应用程序,TCP 是最简单的。
关于java - DatagramPacket - Java 是否首先对其进行分段和重新排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35993573/