为什么使用LengthFieldPrepender / LengthFieldBasedFrameDecoder

问题描述 投票:1回答:2

我现在考虑过这个问题,为什么我要在TCP连接中使用LengthFieldPrependerLengthFieldBasedFrameDecoder

我不明白我唯一的想法是确保数据正确传输并检查长度,但如果我对TCP的理解是正确的,TCP本身应该处理数据传输正确。

java tcp netty
2个回答
1
投票

TCP是一种流协议。应用程序可以对数据进行帧化,即确定数据单元(数据包或消息)的起始位置和结束位置。可靠地实现此目的的两种基本方法是预先添加消息的长度或附加分隔符。有许多方法可以对前置长度进行编码,并且分隔符有很多种可能性。 TCP协议不保证通过单次读取发送的数据将由单次读取接收,尽管短消息通常就是这种情况。


0
投票

你是正确的TCP协议应该处理数据正确传输。尽管在许多情况下,在接收时不知道发送的数据量(即可变量)。

为了解决这个问题,将要发送的数据的长度添加到数据包的标头中。如果我们知道长度是固定大小n,那么我们可以读取n字节,然后是保存数据的下一个length字节。

© www.soinside.com 2019 - 2024. All rights reserved.