私のサーバーは、クライアントにソケット サービスを提供します。私のサーバーDecoderHandler
はFrameDecoder
. クライアントが小さなデータ (約 1024 バイト未満) をサーバーに送信すると、サーバーはそれを正常にデコードしますが、クライアントが画像のコンテンツをサーバーに書き込もうとすると、index-out-bound-exception が発生します。 .
デコーダーによって選択されたバッファーには、サイズの制限が必要だと思います。そこで、パラメーター — バッファーのクラスを出力しました。
@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel,
ChannelBuffer buffer) throws Exception {
System.out.println(buffer.getClass());
return null;
}
次のようになりました。
class org.jboss.netty.buffer.BigEndianHeapChannelBuffer
質問したいのですが、ソケットで画像を送信できるように、バッファのタイプを から に変更できますかBigEndianHeapChannelBuffer
。DynamicChannelBuffer
または、「netty を使用してソケットを介してビッグデータを送信する」問題を解決するのに役立つ他の有効な方法を提供できる人はいますか。
私は本当にあなたの意見が必要です.ありがとうございました!
サーバーからのスタックトレース:
java.lang.IndexOutOfBoundsException
at org.jboss.netty.buffer.AbstractChannelBuffer.checkReadableBytes(AbstractChannelBuffer.java:657)
at org.jboss.netty.buffer.AbstractChannelBuffer.readBytes(AbstractChannelBuffer.java:337)
at org.jboss.netty.buffer.AbstractChannelBuffer.readBytes(AbstractChannelBuffer.java:343)
at com.netty.www.codec.MessageDecoder.receiveChatInfoBeanFromClient(MessageDecoder.java:422)
at com.netty.www.codec.MessageDecoder.decode(MessageDecoder.java:70)
at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:282)
at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:349)
at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
12/09/26 09:12:09 INFO server.MessageServerHandler: The user's channel is closed:
クライアントからのスタックトレース:
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.write(Unknown Source)
at neusoft.socket.TCPClient.writeBytes(TCPClient.java:217)
at neusoft.socket.TestChatNew.sendChartMedia(TestChatNew.java:185)
at neusoft.socket.TestChatNew.main(TestChatNew.java:36)