首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > 高性能WEB开发 >

MINA 传 AMF3 的粘包 和短包有关问题

2012-02-14 
MINA 传 AMF3 的粘包 和短包问题客户端这样写Java codefor (var i 0 i 100 i++ ){var bytes:ByteArr

MINA 传 AMF3 的粘包 和短包问题
客户端这样写

Java code
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 如下

Java code
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就解释不了了 
小弟求代码 学习下怎么怎么拆包 各位大大请赐教

[解决办法]
帮楼主顶了。

热点排行