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

标签 java sockets network-programming udp client-server

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

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

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

最佳答案

这是我要做的:

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

当接收到每个数据报时,使用前6个字节将数据报重新组装成完整的数据。

关于Java UDP 数据报包 - 切片数据以适应缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30291290/

相关文章:

Java FXML 创建不扩展节点的自定义标签元素

java - 是否可以无限期地保持套接字打开

java - 如何用Java实现多线程Web服务器

c - 服务器在限制连接总数时返回的正确 HTTP 状态代码是什么?

tcp - 是否可以通过 TCP 发送数据报?

c# - 动态更改 TCPClient 端口

java - 安卓多人网络游戏

java - 将正则表达式构造为 Java 字符串

java 为案例中未使用的其余索引切换默认值

java - 调用 PaintComponent 时数组的大小变为 0