2011-05-22 178 views
0

我想通過套接字發送文件。 「服務器」位於另一臺計算機上,而另一臺計算機上則位於另一臺計算機上。該文件可以來回服務器和客戶端,但只能在他們當前的目錄中。我所採取的方法是通過使用文件輸入流並將文件寫入文件輸出流neverthelees這不工作,據我瞭解..有沒有另一種方式來通過套接字發送文件?套接字,java發送文件服務器客戶端

這是我的代碼這裏有什麼可能是錯的?

public class Copy { 

    private ListDirectory dir; 
    private Socket socket; 

    public Copy(Socket socket, ListDirectory dir) { 
     this.dir = dir; 
     this.socket = socket; 
    } 

    public String getCopyPath(String file) throws Exception { 
     String path = dir.getCurrentPath(); 
     path += "\\" + file; 
     return path; 

    } 

    public void copyFileToClient(String file, String destinationPath) 
    throws Exception { 

     byte[] receivedData = new byte[8192]; 
     BufferedInputStream bis = new BufferedInputStream(
        new FileInputStream(getCopyPath(file))); 
     String findDot = file; 
     String extension = ""; 

     for (int i = 0; i < findDot.length(); i++) { 
      String dot = findDot.substring(i, i + 1); 
      if (dot.equals(".")) { 
       extension = findDot.substring(i + 1); 
      } 
     } 
     if (extension.equals("")) { 
      extension = "txt"; 
     } 
     BufferedOutputStream bos = new BufferedOutputStream(
        new FileOutputStream(new File(destinationPath + "\\" 
       + "THECOPY" + "." + extension))); 

     int len; 

     while ((len = bis.read(receivedData)) > 0) { 

      bos.write(receivedData, 0, len); 
     } 
     //  in.close(); 
     bis.close(); 
     //  output.close(); 
     bos.close(); 

    } 

    // public static void main(String args[]) throws Exception { 
    //  Copy copy = new Copy(); 
    //  System.out.print(copy.getCopyPath("a")); 
    // } 

} 

而且一些客戶端代碼:

... 

DataOutputStream outToServer = new DataOutputStream(
     clientSocket.getOutputStream()); 
BufferedReader inFromServer = new BufferedReader(
     new InputStreamReader(clientSocket.getInputStream())); 
boolean exit = false; 

else if (sentence.length() > 3 && sentence.substring(0, 3).equals("get")) { 
     String currPath = dir.getCurrentPath(); 
     outToServer.writeBytes(sentence + "_" + currPath + "\n"); 

} else { 

... 
+0

什麼意思是「不起作用」?請更詳細地說明你的問題。 – 2011-05-22 13:06:29

回答

3

copyFileToClient方法使用一個FileInputStream和FileOutputStream中直接,即它不什麼/來自客戶端的所有轉讓,只能從一個本地文件到另一個。如果您想遠程管理服務器上的文件,但沒有任何幫助在不同計算機之間發送數據的情況,這很好。

您必須以某種方式通過Socket的OutputStream/InputStream發送數據 - 即在發送端使用FileInputStream,在接收端使用FileOutputStream。

+2

+1 - 提高閱讀能力! – 2011-05-22 13:26:27

相關問題