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

时间:2015-05-17 19:34:57

标签: java sockets network-programming udp client-server

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

  1. 如果我要发送的数据大于缓冲区如何切片数据以适应数据报包?
  2. 如果数据在客户端切成合适的数据报,如何知道我应该收到的数据包数量?
  3. 如果我在客户端使用String.getBytes()在一个缓冲区中发送所有数据,那么在服务器上如何知道我需要接收的数据包或数据的确切长度,因为我应该收到所有数据?
  4. plus:我知道UDP数据包不应该太长(即不超过548字节),这意味着在客户端切片数据会更有效。

1 个答案:

答案 0 :(得分:2)

以下是我要做的事情:

  1. 选择您要发送的最大数据报大小 N - 例如548。您可以尝试更大的值,最高可达65535。
  2. 将数据拆分为大小为 N - 6 的块。
  3. 在每个块中,使用2个字节作为数据报编号,使用2个字节作为数据报长度。使用剩余的2个字节来发送数据报的总数。是的,这在大多数数据报中“浪费”2个字节,但它使代码更简单。
  4. 收到每个数据报后,使用前6个字节将数据报重新组合成完整的数据。