1. 什么是TCP粘包?
1.1 粘包的定义
TCP(传输控制协议)是一种面向流的协议,它不保留消息边界。发送方多次写入的数据可能会被接收方一次性读取,这种现象称为粘包(Sticky Packet)。
粘包不是TCP协议的缺陷,而是其设计特性导致的。
1.2 粘包的场景
- 发送方粘包:发送方频繁发送小数据包,TCP可能合并发送以优化性能。
- 接收方粘包:接收方缓冲区未及时读取,导致多个包被一次性读取。

粘包情况模拟
服务端代码(不处理粘包)
public class NettyServer {
public static void main(String[] args) {
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new SimpleChannelInboundHandler<ByteBuf>() {
@Override

最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



