to  GJA106:
我在发送方这样发送
int len = 4096;
byte []buffer = new byte[len];
int blockcount = filesize / len;//完整的数据块 数目
int lastblock = filesize % len;//最后一块的大小,可能是0
for(int i=0;i<blocksize;i++) {
    读文件到buffer;
    将buffer发送到数据连接;
}
if(lastblock != 0) {//发送最后一块
    buffer = new byte[lastblock];
    读文件到lastblock;
    发送lastblock;
}
发送小文件完全正确,我尝试用了好几个大小为3k-50k的文件,使用16进制编辑器比较下载之后的文件,发现没有问题。就是大文件不行啊

解决方案 »

  1.   

    for(int i=0;i<blocksize;i++) {
        读文件到buffer;
        将buffer发送到数据连接;
    }
    "将buffer发送到数据连接;",发送有同步控制没有?
      

  2.   

    没有啊。
    发送发先把文件大小发过去,接受接受无误啊。
    之后接下来的传输每一块都要发同步控制吗?
    如果需要,怎么样处理好呢?
    我收发数据的时候是用DataInputStream 和 DataOutputStream的
      

  3.   

    发送发先把文件大小发过去,接受接受无误啊--正确
    之后接下来的传输每一块都要发同步控制吗?--可能有问题。比如有100次循环,在循环中取数据到把数据传给发送数据类这个过程很快,起码比socket发送数据快不少;
    所以你在接收待发送数据方法中如果不同步,当前发送过来的数据可能会与前一次数据产生混杂--数据不一致、少数据。