FileOutputStream foutReceive = new FileOutputStream(pFileName);
    foutReceive.write(buf);>>  foutReceive.flush();   这句加了吗??
    foutReceive.close();

解决方案 »

  1.   

    >>  foutReceive.flush();   这句加了吗??已经flush了
      

  2.   

    >> finUpload.read(buf) read(byte[]) 不一定会把所有的byte都读进来,改用while
    而且,返回-1不是失败,是读完了,抛异常才是失败。int count =0 ;
    while(count < buf.length ) {
      try{
        int len = finUpload.read(buf, count, buf.length - count);
        if( len < 0) 
          break;
      }catch(IOException e ){
        System.err.println("读取文件错误!");
        return false;
      }    
      count += len;
    }
    .....
    write(byte[]) 可能同样需要改while;
      

  3.   

    试试我的,下载50M文件没有问题:(下载潜在服务器端压缩,到达客户端解压)
    import java.io.*;
    import java.net.*;
    import java.util.zip.*;class FileSocketServ{
    public void start()
    throws IOException{
    int ret=0;
    byte[] tmpdata=new byte[4096];
    byte[] data;
    ServerSocket s=new ServerSocket(5918);
    while(true){
    FileInputStream in=new FileInputStream("test.exe");
    Socket client=s.accept();
    GZIPOutputStream out=new GZIPOutputStream(new BufferedOutputStream(client.getOutputStream()));
    do{
    ret=in.read(tmpdata);
    System.out.println(ret);
    if(ret==-1) break;
    data=new byte[ret];
    System.arraycopy(tmpdata, 0, data, 0, ret);
    out.write(data);
    out.flush();
    }while(true);
    in.close();
    out.close();
    }
         }
    }
    client===
    import java.io.*;
    import java.net.*;
    import java.util.zip.*;class FileSocketClnt{
    public static void main(String[] args)
    throws IOException{
    int ret;
    byte[] tmpdata=new byte[4096];
    byte[] data;
    Socket c=new Socket("zxf", 5918);
    GZIPInputStream in=new GZIPInputStream(c.getInputStream());
    FileOutputStream f=new FileOutputStream("Test2.exe");
    do{
    ret=in.read(tmpdata);
    if(ret==-1)break;
    data=new byte[ret];
    System.arraycopy(tmpdata, 0, data, 0, ret);
    f.write(data);
    f.flush();
    }while(true);
    f.close();
    in.close();
    c.close();
    }
    }
      

  4.   

    TO:farawayzheng_necas(遥远)
        if (finUpload.read(buf) <= 0)
        {
          System.err.println("读取文件错误!");
          return false;
        }
    这种方法是从21天学通JAVA 2里面看到的,我和他的代码完全相同。是不是这种方法不对呢?
      

  5.   

    当然不对了,尽信书不如无书 :)
    看一看jdk api doc 就全明白了。