一、解决方案

1、使用 自定义协议 + 编解码器 来解决
2、关键就是要解决 服务器端每次读取数据长度的问题,这个问题解决,就不会出现服务器多读或少读数据的问题,从而避免了 TCP粘包和拆包

二、应用实例

1、要求客户端发送 5 个 Message 对象,客户端每次发送一个 Message 对象
2、服务器端每次接收一个Message,分 5 次进行解码,每读取到一个Message,会回复一个Message对象给客户端

2.1 协议包

public class MessageProtocol {
    private int len; // 关键
    private byte[] content;

    public int getLen() {
        return len;
    }

    public void setLen(int len) {
        this.len = len;
    }

    public byte[] getContent() {
        return content;
    }

    public void setContent(byte[] content) {
        this.content = content;
    }
}

2.2 编解码器

编码器: