Java UDP 数据报包 - 切片数据以适应缓冲区大小

Java UDP datagram packet - slicing data to suit buffer size

在Java中,UDP数据报包使用固定大小的字节数组通过网络发送和接收流。

  1. 如果我要发送的数据大于缓冲区,如何分割数据以适应数据报包?
  2. 如果数据在客户端被分割成合适的数据报,如何知道我应该接收的数据包数量?
  3. 如果我在客户端使用 String.getBytes() 在一个缓冲区中发送所有数据,那么在服务器端如何知道我需要接收的数据包或数据的确切长度作为我应该接收的所有数据?

plus:我知道UDP数据包不应该太长(即不超过548字节),这意味着在客户端切分数据更有效率。

这是我会做的:

  1. 选择您要发送的最大数据报大小 N - 例如 548。您可以尝试更大的值,最高可达 65535。
  2. 将数据分成大小为 N - 6.
  3. 的块
  4. 在每个块中,使用 2 个字节作为数据报编号,2 个字节作为数据报长度。使用剩余的 2 个字节来发送数据报的总数。是的,这个 "wastes" 在大多数数据报中都是 2 个字节,但它使代码更简单。

收到每个数据报后,使用前 6 个字节将数据报重新组合成完整的数据。