Netty编码解码错误

时间:2018-05-15 17:37:47

标签: java maven netty

我正在编写一个简单的网络数据包服务。目前我有一台服务器和一个带有中央协议模块的客户端。

我的客户端日志如下所示:

PacketId编码:1 Writed包。 写作:441

我的服务器日志:

PacketId:8 协议是空的? id:8 PacketId:1 接收id为0的测试

编码器:

@Override
    protected void encode( ChannelHandlerContext channelHandlerContext, Packet packet, ByteBuf byteBuf ) {
        final Protocol protocol = Protocol.getProtocol( packet.getClass() );

        if ( protocol == null ) {
            throw new IllegalStateException( "The requested packet is not registered!" );
        } else {
            final int packetId = protocol.getId();

            if ( packetId > -1 ) {
                byteBuf.writeInt( packetId );
                System.out.println( "PacketId encoded: " + packetId );
                packet.write( byteBuf );
                System.out.println( "Writed packet." );
            }
        }
    }

解码器:

@Override
    protected void decode( ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list ) throws Exception {
        final int packetId = byteBuf.readInt();
        System.out.println( "PacketId: " + packetId );
        final Protocol protocol = Protocol.getProtocol( packetId );

        if ( protocol == null ) {
            System.out.println( "protocol is null ? with id: " + packetId );
        } else {
            final Class<? extends Packet> packetClass = Objects.requireNonNull( protocol ).getPacketClass();

            if ( packetClass != null ) {
                Packet packet = packetClass.newInstance();
                packet.read( byteBuf );

                list.add( packet );
            }
        }
    }

有人知道如何解决?

感谢您的贡献!

0 个答案:

没有答案