2010-09-25 116 views
0

我目前正在做一個家庭作業任務,並且我被徹底卡住了。我在最後一個問題上,我無法弄清楚如何去完成最後的任務。下面是我必須完成的任務:如何在客戶端/服務器Java應用程序中傳輸文件


  1. 客戶端應該 將文件保存在「客戶端」 子目錄的主目錄。

  2. 測試你的程序。確保它與二進制文件一起工作 ,而不僅僅是文本 文件。當 程序與 位於同一臺機器上時,以及當它們通過網絡上的 分隔時,請確保它正常工作。


至此,當我啓動服務器時,它會詢問我要使用哪個端口。然後我啓動客戶端並詢問要使用哪個IP和端口。服務器立即發送主目錄「server」文件夾中的文件列表。然後,我與客戶一起回覆我希望下載的文件編號。這是我卡住的地方。我似乎無法找到任何有關如何做到這一點的信息。正如你可以在我的代碼下面看到的,我正在嘗試使用FileInputReader將文件轉換爲字節數組。然後我將它發送給客戶。然後我嘗試將FileOutputReader接收到的字節數組轉換爲文件。但我似乎無法找到正確的方法來做到這一點,或者即使我正確地做到了這一點。

CLIENT

 int i = 0; 
     while(i < 1000){ 
     String modifiedSentence = inFromServer.readLine(); 
     System.out.println("From Server: " + modifiedSentence); 
     i++; 
     } 

     while(j < 1000) { 
     int byteString = inFromServer.read(); 
     ArrayList<byte[]> bytes = new ArrayList<byte[]>(); 
     bytes.add(byteString); 
     } 
     Integer byteInt = new Integer(byteString); 
     FileOutputStream fo = new FileOutputStream(System.getProperty("user.home")+ "/client/text.txt"); 
     fo.write(byteInt.byteValue()); 

    } 
} 

服務器

  byte[] bytes = new byte[1024]; 
      FileInputStream fi = new FileInputStream(file.toString() + fileArray[userChoiceInt]); 
      fi.read(bytes, 0, 1024); 
      outToClient.write(bytes, 0, 1024); 

     } 
    } 
} 

如果有人可以提供任何意見或正確的類或使用我將不勝感激方法。

預先感謝您。

+0

由於這是作業,你允許使用第三方庫嗎?您基本上重新創建FTP,在Java中存在有用的FTP庫。 – BalusC 2010-09-25 17:33:58

+0

是的,你是正確的,我不能使用任何第三方庫。 :( – 2010-09-26 00:57:47

回答

1

不破壞整個事情這裏有一些提示。

這可以通過使用套接字(服務器&客戶端)輕鬆完成。使用byte []傳輸文件將確保您的程序可以同時使用ascii和二進制文件。

另一種方法是使用遠程方法調用(RMI)中的構建。我沒有使用這種方法傳輸文件,但我相信這是可行的。

如果您不知道,通過以下調用獲取用戶主目錄:System.getProperty(「user.home」);

0

Sun(Oracle)可以查看tutorial。這應該會讓你對套接字有一個基本的瞭解。

然而,我似乎注意到,在客戶端,你迭代了一個特定的次數(1000),這不是一個好主意,因爲一般來說,你不知道要發送的文件的大小,教程應該顯示這一點以及如何進行適當的更改。此外,您一直在循​​環中創建結構,因此除了每次創建新的數據結構之外,都會丟失您收到的任何信息,這是效率低下的。

你所要做的就是從循環之外移動結構的初始化。另外,對於modifiedSentence變量,您可能需要將其從字符串更改爲StringBuilder

+0

哇,是啊,這是可怕的事實,我不斷實例化一個新的ArrayList每次真的打敗了目的,謝謝指出,至於while(i <1000),我使用while(true) ,但是它永遠不會離開循環,我也嘗試了對socket.ready()方法的調用;但是這似乎並不奏效,感謝您的建議,我正在查看您現在發佈的教程。 – 2010-09-26 01:01:28

+0

您應該讀取,直到套接字返回-1(如果您正在讀取字節)或null(如果您正在讀取字符串) – npinti 2010-09-26 07:31:59

0

你可能不應該問如何在這樣的網站在課堂上做功課。這是不合適的。你的服務器確實看起來很好。你的程序只能讀取高達1024字節的文件。您應該更詳細地查看java.io.File。有一個長度方法可以用來查找文件的長度,所以你知道要發送多少。

相關問題