java - DatagramPacket - Java 是否首先对其进行分段和重新排列?

标签 java network-programming udp

我是整个 UDP 的新手(因为每个人都喜欢 TCP),需要问几个关于 Java 实现的问题。

我需要有人告诉我是否:

  1. Java发送的DatagramPackets由于以下原因自动分片 网络配置和数据大小。
  2. DatagramPackets 在由于网络配置和数据大小而自动分片后由 Java 重新排列为正确的分片顺序...在 receive() 调用返回结果之前。
  3. 如果不完整的碎片化 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/

相关文章:

java - 更改 ServletContext 中 ArrayList 中的对象

ios - 二元运算符 '&' 不能应用于类型 'SCNetworkReachabilityFlags' 和 'Int' 的操作数

performance - WebSockets、UDP 和基准

go - golang 中的 UDP,Listen 不是阻塞调用?

java - 文件输出不断覆盖?

java - 使用泄漏的 SSLSocketImpl 分析堆转储

java- "-1"位置

c - GCC 内核模块编译错误

rest - 非 RESTful 与 RESTful

c - 如何在 C 中刷新 UDP 套接字的输入缓冲区?