如何处理设备发送过来的流数据,tcp协议的

hyet

[attach]2430[/attach]
通讯协议如上,现在测试的情况是,设备1kb发送数据没有啥问题,但是2kb的时候,会出现数据少的情况,但不是丢包情况,是包中的丢了一段数据的情况,不知道改如何处理

2259 1 0
1个回答

latin

你这个问题应该是传说中的数据被分段传输了。
 tcp数据传输没有边界,数据可能会被分成多个包传输(当数据大于某个值好像是1.4k就会被分段传输,印象中是这个值),也可能多个包连在一起传输(传输的数据不够1.4k,刚好还有下一个tcp数据传输,会带上下一个包的部分数据)。
 
比如你传输的是 2k的数据,tcp底层会分成2个包传输,所以你在onMessage里看到的数据是部分数据,可能只有头没尾,也可能是只有尾没有头。但是如果你把每次onMessage里的数据追加在文件里,你会发现文件里的数据是完整的。
 
按照官方的说法,你要搞个通讯协议来分包。
http://doc.workerman.net/protocols/why-protocols.html

  • hyet 2019-09-19

    但现在我发一个64KB的图片,服务器接受到的数据才50多KB ,抓包发现,数据都传过来了,但不知道为什么数据会少,如何粘包的情况,数据应该会多吧

  • latin 2019-09-19

    不管是分包还是粘包总数据都不会多,也不会少

年代过于久远,无法发表回答
🔝