Java:为什么 DatagramSocket 的“receive”方法会截断消息?
来自 C socket()
/recv()
背景,Java DatagramSocket.receive API 看起来有点奇怪。为什么强制程序员为传入数据分配足够大的 DatagramPacket ?
Coming from a C socket()
/recv()
background, the Java DatagramSocket.receive API seems a bit strange. Why does force the programmer to allocate a DatagramPacket
large enough for the incoming data?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个问题是基于一个错误的前提。在 C 中,
recv
系统调用的签名是:请注意,您传递了一个指向缓冲区的指针以及该缓冲区的长度。手动输入然后说:
换句话说,C API 期望调用者分配一个“足够大”的缓冲区,并且可能截断较长的消息……就像 Java 所做的那样。
This question is based on a false premise. In C, the signature for the
recv
syscall is:Note that you pass a pointer to a buffer, and the length of that buffer. The manual entry then says:
In other words, the C API expects the caller to allocate a "large enough" buffer, and may truncate messages that are longer ... just like Java does.