2017-11-19 6 views
-1

Spigotのネットワークシステムを開発したいと思います。SptyotでNettyを使用する際のエラー

[16:31:51 WARN]: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. 
io.netty.handler.codec.DecoderException: java.lang.IndexOutOfBoundsException 
     at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:213) ~[spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:232) [spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:218) [spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:769) [spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     at io.netty.channel.AbstractChannel$AbstractUnsafe$5.run(AbstractChannel.java:568) [spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:341) [spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     at io.netty.util.concurrent.SingleThreadEventExecutor.confirmShutdown(SingleThreadEventExecutor.java:640) [spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:358) [spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     at java.lang.Thread.run(Unknown Source) [?:1.8.0_151] 
Caused by: java.lang.IndexOutOfBoundsException 
     at io.netty.buffer.EmptyByteBuf.readInt(EmptyByteBuf.java:470) ~[spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     at de.zettee.pixelcloud.client.handler.PacketDecoder.decode(PacketDecoder.java:14) ~[?:?] 
     at io.netty.handler.codec.ByteToMessageDecoder.decodeLast(ByteToMessageDecoder.java:297) ~[spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:208) ~[spigot_server.jar:git-Spigot-c3c767f-33d5de3] 
     ... 9 more 

私はそれがPacketDecoderに知っているが、サーバーが起動されたときに、何もクライアントに送信されません:私はパケットシステムを使用しますが、毎回、私は次のようなエラーが発生したサーバを起動しようとするデータを転送する 彼はそれを解読することができた。私はなぜエラーが発生するのか分からない。

あなたはクラスが必要な場合:

PacketDecoder: https://pastebin.com/a96GtaJd

NetworkHandler: https://pastebin.com/udZypz0j

Mainclass +クライアント: https://pastebin.com/WEGDCUXw

ああ、私は私が使用していることを言うべきNetty 1.4.17 誰かが私を助けてくれることを願っています。 ありがとうございます!

+0

[ask]と[mcve]を見てください。 「私の巨大なオフサイトコードのダンプをデバッグしてください」というのは本当にトピック[SO]の質問ではありません。 – pvg

答えて

0

ByteBufに十分なデータがないことを確認せずに、ByteBufからintを読み込もうとします。あなたが好きないくつかのチェックを追加する必要があります

Class<? extends Packet> packetClass = PacketHandler.getPacketClassByID(byteBuf.readInt(), PacketType.IN); 

:ネッティーを覚えておいてください

if (byteBuf.readableBytes() < 4) { 
    return; 
} 

は、非同期/非ブロッキングとバイトが(その理由だけでTCPがどのように動作するかの)断片化して来ることができています。

+0

あなたの答えに感謝します。私はこれを試してみよう! – zettee

+0

エラーは表示されなくなりましたが、クライアントはすぐに切断されます。エラーは発生しないため、修正できません。 – zettee

関連する問題