大量数据传输会丢包
硬件那边传递数据给我,我这边以每2400个字节为一组数据,然后一组接收完了后立马接收下一组,就这样反复轮询,但是会出现数据丢包的问题,就是某一组数据,我这边收到的并没有2400个,可能丢100个,或者丢200个,或者其他数量的丢失,请问这个问题应该怎么处理
可以修改下源码里bytebuffer的大小试试,默认是1024,可以根据情况改大一点。这种连续接收包,丢包的情况,最好与硬件那边协商定义一个完整包的包头和包尾
大佬,我尝试修改了,结果还是丢包,之前我说的可能不清楚,我这边收到的2400个字节的数据是我跟硬件那边定义好的大小,但是因为蓝牙模块的厂商对数据做了分包,导致我这边接收到的数据大小都是100个字节一个包,而且我们的传输速率还是比较高的,因为甲方的需求,1秒钟大概要传8000个字节,就导致了丢包,而且因为数据是实时采集的,我们并不能定义包头包尾,因为一旦开始就不会结束,我现在不知道怎么解决了。
如果没有定义包头和包尾部,框架每次read的回调时机是mmInStream.available()==0,所以按理来说如果发送方每次发100个字节接收到的也是100个字节回来,2400个字节就需要接收24次 你需要在read回调保存这24次的结果 最后自己组装到一起才是最后的2400个字节。 你现在的意思是回调24次之后数据大小不是2400个字节?
是的,有的时候能连续好几次都收到2400个字节,有的时候就只能收到2200,有的时候就只能收到1400,就是丢的数据都是随机的,概率也挺大,基本完整的收到2400个字节2-3次,就会出现丢包的情况
------------------ 原始邮件 ------------------ 发件人: "AllenLiu"<[email protected]>; 发送时间: 2021年2月19日(星期五) 下午3:16 收件人: "AlexLiuSheng/EasyBluetoothFrame"<[email protected]>; 抄送: "随手丢钱包"<[email protected]>; "Author"<[email protected]>; 主题: Re: [AlexLiuSheng/EasyBluetoothFrame] 大量数据传输会丢包 (#7)
如果没有定义包头和包尾部,框架每次read的回调时机是mmInStream.available()==0,所以按理来说如果发送方每次发100个字节接收到的也是100个字节回来,2400个字节就需要接收24次 你需要在read回调保存这24次的结果 最后自己组装到一起才是最后的2400个字节。 你现在的意思是回调24次之后数据大小不是2400个字节?
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
那你按照回调的时候接收到2400个字节为止为一组,就不用计算次数了然后看看2400个字节能否完整的组成一组数据。有可能发送方每次不是发送的100个字节吧。
这是我打印的接收完成的数据,接收完成后我就会去处理,然后开始下一次接收
这s是没有接收完成的数据,我这边就会停在这里,这次是丢了100个字节。所以我这边倒数还差100的时候停住了
是这样的,2400个字节的数据我这边是每8个字节按照一定的方法处理一次,但是每100个字节,会出现12组数据+半组,然后这半组会在下一个100个字节的前4个字节,如果中途丢100个字节的包,会导致我处理的数据后面全部混乱,所以我才需要解决丢包的问题
框架按理来说不会出现丢包的情况,都是有多少接收多少。现在要确定是不是丢包,现在每次发送到最后没有再收到数据包为止,这些数据有时候都不够2400么?你先看看每次只发一组 到最后接收到的是不是2400,不要管每次回调接收到的字节数是多少,最终加一起也不够2400么。因为我感觉每次接收到的就有可能不是100
我每次接受的确定是100个字节没有少,如果软件不会出现丢包的情况,那可能是因为我这边环境的干扰或者蓝牙模块的问题,谢谢大佬的解惑,我这个跟硬件沟通一下,再排查一下看看是不是硬件的问题
------------------ 原始邮件 ------------------ 发件人: "AllenLiu"<[email protected]>; 发送时间: 2021年2月19日(星期五) 下午3:53 收件人: "AlexLiuSheng/EasyBluetoothFrame"<[email protected]>; 抄送: "随手丢钱包"<[email protected]>; "Author"<[email protected]>; 主题: Re: [AlexLiuSheng/EasyBluetoothFrame] 大量数据传输会丢包 (#7)
框架按理来说不会出现丢包的情况,都是有多少接收多少。现在要确定是不是丢包,现在每次发送到最后没有再收到数据包为止,这些数据有时候都不够2400么?你先看看每次只发一组 到最后接收到的是不是2400,不要管每次回调接收到的字节数是多少,最终加一起也不够2400么。因为我感觉每次接收到的就有可能不是100
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
我每次都是E/inputStream: len990 990这个长度很诡异