gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:58:34 26 4
gpt4 key购买 nike

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

最佳答案

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

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

请注意,您传递了一个指向缓冲区的指针,以及该缓冲区的长度。手动输入然后说:

If a message is too long to fit in the supplied buffer, excess bytes may be discarded depending on the type of socket the message is received from.

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

关于Java:为什么 DatagramSocket 的 `receive` 方法会截断消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4916978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com