[attach]2430[/attach]
通訊協(xié)議如上,現(xiàn)在測試的情況是,設備1kb發(fā)送數(shù)據(jù)沒有啥問題,但是2kb的時候,會出現(xiàn)數(shù)據(jù)少的情況,但不是丟包情況,是包中的丟了一段數(shù)據(jù)的情況,不知道改如何處理
你這個問題應該是傳說中的數(shù)據(jù)被分段傳輸了。
?tcp數(shù)據(jù)傳輸沒有邊界,數(shù)據(jù)可能會被分成多個包傳輸(當數(shù)據(jù)大于某個值好像是1.4k就會被分段傳輸,印象中是這個值),也可能多個包連在一起傳輸(傳輸?shù)臄?shù)據(jù)不夠1.4k,剛好還有下一個tcp數(shù)據(jù)傳輸,會帶上下一個包的部分數(shù)據(jù))。
?
比如你傳輸?shù)氖?2k的數(shù)據(jù),tcp底層會分成2個包傳輸,所以你在onMessage里看到的數(shù)據(jù)是部分數(shù)據(jù),可能只有頭沒尾,也可能是只有尾沒有頭。但是如果你把每次onMessage里的數(shù)據(jù)追加在文件里,你會發(fā)現(xiàn)文件里的數(shù)據(jù)是完整的。
?
按照官方的說法,你要搞個通訊協(xié)議來分包。
http://doc.workerman.net/protocols/why-protocols.html