我使用byte[]接收串口消息,消息协议是以0x64开始,0x16结束(注:消息体中含有一个为0x64字节),长度不定。请问我应该用什么方法来区分每个消息体。
前提条件:1、每次接收有可能是1个消息体,也可能是多个。
          2、接收可能含有不完成的消息体,如可能是1个半,或2个半。
          3、把上次解析剩下的不完整消息体和下次接收到的消息体比较,判断是否能合着完整消息。
          4、效率越高越好。
不知道我说明白了吗!!

解决方案 »

  1.   

    恩和SOCKET的包差不多啊。实现的方法很多啊,你都知道了有粘包的现象了,那么处理起来肯定有办法的。
      

  2.   

    自己编写一个消息流类 MessageStream  每次把接收到的byte数据追加到MessageStream中,然后判断是否存在一个完整的消息,若存在,循环读出;若不存在,则继续接受byte数据,再又把它放到MessageStream中继续判断,循环。
    这个MessageStream类相当于一个接受消息的缓冲区
    当然,前提是你得将消息格式化  像 消息=消息头+消息长度(byte单位)+具体内容,像你说的“消息协议是以0x64开始,0x16结束”也可以具体做法,自己揣摩吧。