繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM