MINA 传 AMF3 的粘包 和短包问题

zjkboy 2010-01-27 02:09:21
客户端这样写


for (var i = 0; i < 100; i++ )
{
var bytes:ByteArray = new ByteArray();
bytes.writeObject( {x:1, y:2 } );
bytes.compress();
_socket.writeBytes(bytes);
_socket.flush();
}


服务端的代码是网上找的
其中AMF3Decoder 如下


public class AMF3Decoder extends CumulativeProtocolDecoder
{

private final SerializationContext context = new SerializationContext();
private final Amf3Input amf3in;

public AMF3Decoder()
{
amf3in = new Amf3Input(context);
}

protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception
{
boolean temp = false;
try
{
in.position(0);
amf3in.setInputStream(new InflaterInputStream(new DataInputStream(in.asInputStream())));
Object message = amf3in.readObject();
if (message instanceof ASObject)
{
out.write(message);
in.free();
temp = true;
}
else
{
in.free();
temp = false;
}
}
catch (Exception e)
{
e.printStackTrace();
}
return temp;
}
}


粘包和断包的问题不会处理
报这样的错误:

org.apache.mina.filter.codec.ProtocolDecoderException: java.lang.IllegalStateException: doDecode() can't return true when buffer is not consumed. (Hexdump: 78 DA E3 E2 66 64 AE 60 61 64 AE 64 61 62 04 00 07 08 01 1A 78 DA E3 E2 66 64 AE 60 61 ............................



at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:180)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:414)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:49)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:832)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$HeadFilter.messageReceived(DefaultIoFilterChain.java:616)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:414)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:408)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:578)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:540)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:532)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:58)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Worker.run(AbstractPollingIoProcessor.java:857)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
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)
Caused by: java.lang.IllegalStateException: doDecode() can't return true when buffer is not consumed.
at org.apache.mina.filter.codec.CumulativeProtocolDecoder.decode(CumulativeProtocolDecoder.java:176)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:170)
... 15 more



如果不是大量的发数据 是没有问题
但是加个for就解释不了了
小弟求代码 学习下怎么怎么拆包 各位大大请赐教
...全文
1043 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zq149817817 2012-03-07
  • 打赏
  • 举报
回复
没有人会解决么?
smile_273730689 2011-04-26
  • 打赏
  • 举报
回复
帮忙顶起。 希望有高人 指点。
该昵称不和谐 2010-10-28
  • 打赏
  • 举报
回复
wwwwwww
fengyoujie 2010-01-29
  • 打赏
  • 举报
回复
帮楼主顶了。

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧