2012-12-13 205 views
0

我试图在客户端服务器之间传输文件,如果文件大于12MB,则通过块发送,否则它会正常发送。我的主要问题是,每次我传输的东西都比原来的东西多得多,我需要在完成后使用摘要消息,这样它不会按照它的方式工作,另一个是当我尝试发送文件通过网络客户端读取文件发送速度比服务器写入更快,因此客户端关闭程序关闭连接,破坏文件。我转码为波纹管:通过套接字传输文件客户端服务器java

这是客户端传输代码:

if(fSize>maxfileSize){ 
     totbLidos = 0; 
     byte[] fBytes = new byte[fBsize]; 
     while(totbLidos < fSize){ 
      int bRemain = (int) f.length() - totbLidos; 
      if(bRemain < fBsize){ 
       fBsize = bRemain; 
      } 
      int bRead = tFile.read(fBytes, 0, fBsize); 
      tServidor.write(fBytes, 0, fBsize); 
      tServidor.flush(); 
      if(bRead>0){ 
       totbLidos+=bRead; 
      } 

      System.out.println("Total Bytes Lidos: " + totbLidos); 

     } 

     tFile.close(); 
     System.out.println("Ficheiro enviado"); 
     cliente.close(); 
    } 
    else{ 
     totbLidos = 0; 
     byte[] fBytes = new byte[fSize]; 
     while(totbLidos < fSize){ 
      int bRead = tFile.read(fBytes,0,fSize); 
      if(bRead>0){ 
       totbLidos+=bRead; 
      } 
      tServidor.write(fBytes, 0, fSize); 
      System.out.println("Total Bytes Lidos: " + totbLidos); 
      tServidor.flush(); 
     } 
     tFile.close(); 
     System.out.println("Ficheiro enviado"); 
     cliente.close(); 
    } 
} 

服务器传输代码:

if(fSize > maxfileSize){ 
      totbLidos = 0; 
      DataInputStream tFile = new DataInputStream(cliente.getInputStream()); 
      BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(fName)); 
      byte[] fBytes = new byte[fBsize]; 
      while(totbLidos < fSize){ 
       int bRemain = size - totbLidos; 
       if(bRemain < fBsize){ 
        fBsize = bRemain; 
       } 
       int bRead = tFile.read(fBytes, 0, fBsize); 
       fos.write(fBytes); 
       fos.flush(); 
       if(bRead>0){ 
        totbLidos+=bRead; 
       } 
       System.out.println("Bytes lidos: " + bRead); 
       System.out.println("Total Bytes Escritos: " + totbLidos); 
      } 
      System.out.println("Ficheiro recebido"); 

      fos.close(); 
      tFile.close(); 
      cliente.close(); 
      servidor.close(); 
     } 
     else if(fSize < maxfileSize){ 
      totbLidos = 0; 
      DataInputStream tFile = new DataInputStream(cliente.getInputStream()); 
      BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(fName)); 
      byte[] fBytes = new byte[fSize]; 
      while(totbLidos < fSize){ 
       int bRead = tFile.read(fBytes,0,fSize); 
       fos.write(fBytes); 
       fos.flush(); 
       if(bRead>0){ 
        totbLidos+=bRead; 
       } 
       System.out.println("Total Bytes Escritos: " + totbLidos); 
      } 
      System.out.println("Ficheiro recebido"); 
      fos.close(); 
      tFile.close(); 
      cliente.close(); 
      servidor.close(); 
     } 
} 

回答

2

你是不是写相同的字节数,你在这里找到。

fos.write(fBytes); 

尝试使用

fos.write(fBytes, 0, bRead); 
+0

感谢该解决字节问题 –

0

除了@Peter Lawrey答案,我建议你可以重用Apache下议院IO API来避免这种错误的未来:

IOUtils.copyLarge(InputStream input, OutputStream output, long inputOffset, long length) 
相关问题