Java:为什么DatagramSocket的`receive`方法会截断消息?

时间:2011-02-06 23:36:38

标签: java udp

来自C socket() / recv()背景,Java DatagramSocket.receive API似乎有点奇怪。为什么强制程序员为传入数据分配足够大的DatagramPacket

1 个答案:

答案 0 :(得分:4)

这个问题是基于错误的前提。在C中,recv系统调用的签名是:

ssize_t recv(int s, void *buf, size_t len, int flags);

请注意,您将指针传递给缓冲区以及该缓冲区的长度。手册输入然后说:

  

如果消息太长而无法容纳在提供的缓冲区中,则可能会丢弃多余的字节,具体取决于接收消息的套接字类型。

换句话说,C API期望调用者分配一个“足够大”的缓冲区,并且可能截断更长的消息......就像Java一样。