[英]Java: why does DatagramSocket's `receive` method truncate messages?
来自C socket()
/ recv()
背景,Java DatagramSocket.receive API似乎有点奇怪。 为什么强制程序员为传入数据分配足够大的DatagramPacket
?
这个问题是基于一个错误的前提。 在C中, recv
系统调用的签名是:
ssize_t recv(int s, void *buf, size_t len, int flags);
请注意,您将指针传递给缓冲区,以及该缓冲区的长度。 然后手动输入说:
如果消息太长而无法容纳在提供的缓冲区中,则可能会丢弃多余的字节,具体取决于接收消息的套接字类型。
换句话说,C API期望调用者分配一个“足够大”的缓冲区,并且可能截断更长的消息......就像Java那样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.