问题现象: 同一台电脑测试文件传输, 无论多大的文件,都能传过去,且能正常解压。
但放两台不同的电脑上测试,文件能传过去,但是解压提示,“不可预料的压缩文件末端” ,两边包的大小一样,文件没有缺失。
PS: 我传的是 zip 包。
1
mhycy 2019-09-09 16:34:51 +08:00 1
检查代码,最后一段分片没有正常写入
|
2
VDimos 2019-09-09 16:37:01 +08:00 via Android 1
一台电脑走的回环吗?
如果是可能会出现最后一片分片没有获取到 |
3
misaka19000 2019-09-09 16:42:41 +08:00
算一下 md5 是否一样
|
4
yss729 OP @VDimos 一台电脑分别运行 client 和 server 端 , 可能是最后一片分片的问题,但为什么同一台电脑却能通过?
|
5
podel 2019-09-09 16:55:41 +08:00
算 md5 对比一下。
分段算 md5 对比一下。 可以看看哪段有问题。 也可以在程序里面 没传一片 输出 md5,或者保存 md5 调试 看看问题是哪一片有问题。 |
9
arloor 2019-09-09 17:23:00 +08:00
能说下原来错的情况的代码吗,想 mark 一下
|
10
opengps 2019-09-09 17:47:36 +08:00
以前帮同学改过一段,他最后一段大小没处理,被文件流填充了跟前面设置的缓冲区大小一样大了
|
11
labnotok 2019-09-09 17:50:45 +08:00 via Android
大小端?
|
12
yss729 OP @arloor 抱歉,才看见,我用的是 supersocket
// 临时缓冲区 private byte[] TempBuffer = null; public BinaryRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest){ // length 是每一次传过来的数据量,默认固定是 4096 个字节, 我是边传边往 TempBuffer 里写,在判断最后一个包的时候我是判断 if(length<4096) 我以为这样判断应该不会有误,实际上就是这里的问题。 应该是要累计每次传过来的 Length 与 TempBuffer 的长度一致,才算完成 } |