Mina中的粘包處理

2021-07-27 08:15:18 字數 575 閱讀 6702

mina框架雖然已經老了,不過還是比較常用的,遇到解碼粘包問題時,就需要繼承乙個特定的解碼器了——cumulativeprotocoldecoder。

顧名思義,這個解碼器本身就是作為累積資料用的,為什麼這麼說呢?因為:

在decode()方法返回false時,此解碼器會把接收到的資料累積性地快取至iobuffer中

這樣只要繼承此解碼器,然後稍做處理,就可以擺脫粘包問題了。

比如,一次通訊資料的格式為

type

lencontent

intint

string

當我接收一次資料時,會首先通過得到len值來判斷此次所有資料的長度,如果content的長度與len值相等,則此次資料接收完畢,否則將繼續接收。

/**

* 資料通訊解碼--處理粘包

*/public

class

updatedatadecoder

extends

cumulativeprotocoldecoder else

}}

以上。

mina 粘包無法解決的解決辦法

如果你遇到 粘包 問題,實際上可能不是粘包問題。使用mina的時候鋪天蓋地的都說要加上 executorfilter fc.addlast executor new executorfilter executors.newcachedthreadpool 我在測試的時候發現很容易出現粘包問題,ok ...

半包粘包處理

資料接收中粘包及半包的處理 資料接收中粘包及半包的處理 2006 10 16 09 45 在使用tcp協議的網路應用中,不可避免需要處理的乙個問題就是半包和粘包的情況。一種做法是在接收端設乙個比較大的緩衝區,先將收到的資料報都放到緩衝區中,然後從該緩衝區中選取完整的資料報出來。該緩衝區的實現可以使用...

TCP粘包的拆包處理

因為tcp是流式處理的,所以包沒有邊界,必須設計乙個包頭,裡面表示包的長度 一般用位元組表示 根據這個來逐個拆包。如果對於傳送 接收頻率不高的話,一般也就不做拆包處理了,因為不大可能有粘包現象。以下是粘包和拆包的分析 用qt的tcpsocket讀出的資料來拆 1 m imp m thread boo...