我是netty的新手,我正在尝试编写一个简单的聊天客户端/服务器应用程序。如果我使用默认的字符串编码器/解码器,那么一切正常,但是当我试图编写自己的编码器/解码器时,它似乎并没有在编码后将其发送到服务器。为简单起见,我现在尝试只发送一个常数。
继承编码器:
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
public class ChatEncoder extends MessageToByteEncoder {
@Override
protected void encode(ChannelHandlerContext chc, Object msg, ByteBuf out) throws Exception {
System.out.println("ENCODE BEFORE");
out.writeInt(2);
System.out.println("ENCODE AFTER");
}
}
继承人解读:
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import java.util.List;
public class ChatDecoder extends ByteToMessageDecoder {
@Override
protected void decode(ChannelHandlerContext chc, ByteBuf in, List<Object> out) throws Exception {
System.out.println("DECODE BEFORE");
out.add(in.readBytes(4));
System.out.println("DECODE AFTER");
}
}
如果我用于管道解码器/编码器这些,那么它不工作。如果我使用字符串编码器/解码器,它可以很好地工作:
pipeline.addLast("decoder", new ChatDecoder()); //StringEncoder()
pipeline.addLast("encoder", new ChatEncoder()); //StringDecoder()
我得到了#34; ENCODE BEFORE&#34; &#34;编码&#34;编码&#34;消息,但不是&#34; DECODE BEFORE&#34;一。
我做错了什么?