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...