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