netty tcp拆包

來源:互聯網
上載者:User

標籤:ant   equals   length   red   arraylist   return   normal   tostring   als   

private List<byte[]> getCompletePacket(byte[] bytes, ByteBuf byteBuf) {        byte[] clone = bytes.clone();        int i = 0;        List<byte[]> ret = Lists.newArrayList();        while (i + YTLConstant.HEADER_LENGTH < clone.length) {            byte[] header = Arrays.copyOfRange(clone, i, YTLConstant.HEADER_LENGTH);            if (Arrays.equals(header, YTLConstant.ELECTRICITY_METER_RECEIVE_HEADER)                    || Arrays.equals(header, YTLConstant.RELAY_SETTING_RECEIVE_NORMAL_HEADER)                    || Arrays.equals(header, YTLConstant.RELAY_SETTING_RECEIVE_WRONG_HEADER)                    || Arrays.equals(header, YTLConstant.RELAY_STATUS_RECEIVE_HEADER)) {                //讀取電錶 接收資料 頭                if (YTLConstant.HEADER_LENGTH + 1 < clone.length) {//加1為了判斷長度位                    byte infoLength = clone[YTLConstant.HEADER_LENGTH];                    int tailIndex = YTLConstant.HEADER_LENGTH + infoLength + 2;//CRC長度為2                    if (tailIndex <= clone.length - 1 && bytes[tailIndex] == YTLConstant.TAIL) {                        i = tailIndex + 1;                        if (i == clone.length) {                            ret.add(bytes);                            byteBuf.skipBytes(i);                        } else {                            ret.add(Arrays.copyOf(clone, i));//從clone中截取長度為i的數組                            clone = Arrays.copyOfRange(clone, i, clone.length - 1);                            byteBuf.skipBytes(i);                            i = 0;                        }                    }else{                        //無效指令跳過                        byteBuf.skipBytes(clone.length);                        break;                    }                }            }else{                //無效指令跳過                if (logger.isDebugEnabled()) {                    logger.debug("Received an unregistered cmd,the header is : "+Arrays.toString(header));                }                byteBuf.skipBytes(clone.length);                break;            }        }        return ret;    }

 

netty tcp拆包

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.