2015-08-27 49 views
3

我是Java網絡的新手,爲了解決我的問題已經有一段時間了,我想知道爲什麼不從一些更合格的人那裏得到一些建議?Java文件傳輸文件到服務器

我目前已經做了一個小工具來管理我的服務器和另一個小型客戶端工具。我的目標是讓該工具能夠從客戶端向服務器計算機發送命令。通過這種方式,我可以在另一臺計算機上對服務器計算機執行某些操作,包括髮送帶有更新文件的zip存檔。

我有基本設置:從客戶端向服務器發送命令(服務器回覆一個確認)的TCP連接,然後我想要發生的行爲。我現在的問題是這樣的:

當從客戶端發送文件(.zip)到服務器時,我應該通過TCP發送它還是使用類似FTP?我不僅希望將文件發送到服務器,而且還要在文件到達時提取並替換現有文件。

親切的問候,亞歷克斯

編輯:這是我用來從客戶端傳輸文件到服務器,但該文件沒有達到全尺寸.. d目標:

服務器

package server.control.net.impl; 

import java.io.BufferedInputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class Update implements Runnable { 

    private final static int serverPort = 5555; 
    private final static String fileInput = "C:\\Users\\Alexander\\Documents\\update.zip"; 

    public static void main(String args[]) throws IOException{ 
     ServerSocket servsock = new ServerSocket(serverPort); 
     File myFile = new File(fileInput); 
     while (true) { 
      Socket sock = servsock.accept(); 
      byte[] mybytearray = new byte[(int) myFile.length()]; 
      BufferedInputStream bis = new BufferedInputStream(new FileInputStream(myFile)); 
      bis.read(mybytearray, 0, mybytearray.length); 
      OutputStream os = sock.getOutputStream(); 
      os.write(mybytearray, 0, mybytearray.length); 
      os.flush(); 
      sock.close(); 
     } 
    } 

    public static void start(){ 
     Update upd = new Update(); 
     Thread tupd = new Thread(upd); 
     tupd.start(); 
    } 

    @Override 
    public void run() { 

    } 
} 

客戶

package server.control.net; 

import java.io.BufferedOutputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.Socket; 
import java.net.UnknownHostException; 

public class TCPClient { 

    private final static String serverIP = "127.0.0.1"; 
    private final static int serverPort = 5555; 
    private final static String fileOutput = "C:\\Users\\Alexander\\Documents\\updateoutput.zip"; 

    public static void main(String args[]) throws UnknownHostException, IOException { 
     Socket sock = new Socket(serverIP, serverPort); 
     byte[] mybytearray = new byte[1024]; 
     InputStream is = sock.getInputStream(); 
     FileOutputStream fos = new FileOutputStream(fileOutput); 
     BufferedOutputStream bos = new BufferedOutputStream(fos); 
     int bytesRead = is.read(mybytearray, 0, mybytearray.length); 
     bos.write(mybytearray, 0, bytesRead); 
     bos.close(); 
     sock.close(); 
    } 
} 
+0

當你有一個TCP了,我會使用它。 FTP必須在特權端口上運行,這使得自己運行起來更加複雜。 –

+0

參考http://stackoverflow.com/questions/32226231/any-good-api-to-upload-image-using-java-api/32226695#32226695 –

+0

謝謝你的快速回復。我使用我在tcp上的文件傳輸代碼更新了主帖,但文件沒有全部到達服務器 – aekramer

回答

2

你沒有得到在serverSocket.accept()之後從插座。在插座上打開InputStream

clientSocket = serverSocket.accept(); 

    InputStream in = clientSocket.getInputStream(); 

    // Writing the file to disk 
    // Instantiating a new output stream object 
    OutputStream output = new FileOutputStream("YourFile.zip"); 

    byte[] buffer = new byte[1024]; 
    while ((bytesRead = in.read(buffer)) != -1) { 
     output.write(buffer, 0, bytesRead); 
    } 
    // Closing the FileOutputStream handle 
    output.close(); 

請參閱在工作示例:Write and Read File over Socket