2013-11-04 119 views
1

你好,我正在嘗試做一個小型客戶端文件服務器應用程序,其中可以傳輸任何類型的文件,包括(.txt,.JPEG,.docx,.mp3和.wma)。到目前爲止,我只能隨意進行轉移。大多數情況下文件不被傳輸;只有圖像打印在客戶端路徑上。文件傳輸陷入做while循環

在我看來,該文件卡在do while循環中。請幫我解決這個問題。

服務器部分:

// create socket 
    ServerSocket serversock = new ServerSocket(444); 

    while (true) { 

     System.out.println("Waiting for client to connect..."); 
     Socket welcomesock = serversock.accept(); 
     System.out.println("Client has connected from: " + welcomesock.getInetAddress().getHostAddress()); 


     File myFile = new File ("C:\\temp\\New Stories.wma"); 

     if(!myFile.exists()){ 
      System.out.println("Filename does not exist"); 
      welcomesock.close(); 
     } 

     else{ 
      byte [] mybytearray = new byte [(int)myFile.length()]; 

      FileInputStream fis = new FileInputStream(myFile); 

      BufferedInputStream bis = new BufferedInputStream(fis); 

      bis.read(mybytearray,0,mybytearray.length);  

      OutputStream os = welcomesock.getOutputStream(); 

      System.out.println("Sending file"); 

      os.write(mybytearray,0,mybytearray.length); 

      os.flush(); 

      os.close(); 

      } 
     }</i> 

客戶端部分:

,而(真){

 int bytesRead; 
     int currentlength = 0; 
     int fsize=6022386; // filesize temporary hardcoded 
     long start = System.currentTimeMillis(); 


     // Creates the Client socket and binds to the server 
     Socket clientSocket = null; 

     try { 
      clientSocket = new Socket(127.0.0.1, 444); 
      } catch (UnknownHostException e) { 
       e.printStackTrace(); 
       } 




     byte [] bytearray = new byte [fsize]; 
     InputStream is = clientSocket.getInputStream(); 


     FileOutputStream fos = new FileOutputStream("D:\\New Stories.wma"); 

     BufferedOutputStream bos = new BufferedOutputStream(fos); 
     bytesRead = is.read(bytearray,0,bytearray.length); 
     currentlength = bytesRead; 

     do { 
      bytesRead = is.read(bytearray, currentlength, (bytearray.length-currentlength)); 
      if(bytesRead >= 0) currentlength += bytesRead; 

     } while(bytesRead > -1); 

     bos.write(bytearray, 0 , currentlength); 
     bos.flush(); 
     long end = System.currentTimeMillis(); 
     System.out.println(end-start); 

     bos.close(); 
     clientSocket.close(); 



    } 

回答

0

你的服務器部分有一個無限循環:

while (true){ 
    ... 
} 

永遠不會退出。你可能會想改變:

if(!myFile.exists()){ 
     System.out.println("Filename does not exist"); 
     welcomesock.close(); 
    } 

if(!myFile.exists()){ 
     System.out.println("Filename does not exist"); 
     welcomesock.close(); 
     break; 
    } 

將退出循環,當沒有文件存在。

+0

確定會看到它,但是當我嘗試下載...文件似乎增加到其實際大小...但是,一旦我終止程序...文件大小爲零.. – Micheal

+0

其工作兄弟..好的兄弟會打勾你的回答:) – Micheal