gpt4 book ai didi

java - SocketChannel - 读取多个数据包的消息

转载 作者:行者123 更新时间:2023-12-01 12:55:01 26 4
gpt4 key购买 nike

我构建了一个客户端(SocketChannel),它正在获取大消息(每条消息的大小约为 1MB-2MB)。我怎样才能收到消息?我正在使用选择器。当键为Readable时,我想读取接收消息的所有数据包。我如何知道接收的数据包属于一条消息而不属于另一条消息?

最佳答案

最安全的方法是提前知道每条消息的大小。如果您可以更改服务器协议(protocol)以在消息本身之前发送消息的大小,那么您在客户端中要做的就是首先读取大小,最终在 ByteBuffer 中为该大小分配足够的内存,然后读取数据,直到获得所需的字节数。

如果无法更改服务器协议(protocol),则必须有某种方法来识别消息的开头或结尾,例如特定的页眉或页脚。然后,您需要继续读取数据,直到到达页脚或下一个标题,具体取决于您所拥有的数据。

另请记住,对于大型消息,您可能无法在一次 read() 中获得所有数据。您需要保持选择键对 OP_READ 操作感兴趣,通过每次 read() 将一大块数据添加到缓冲区中,直到从 channel 读取所有数据。

关于java - SocketChannel - 读取多个数据包的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23976416/

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