Java文件传输文件到服务器

我是Java网络的新手,现在已经为我的问题寻找解决方案了一段时间,我想为什么不在这个问题上向一些更有资格的人提出一些建议呢?

我目前已经制作了一个管理我的服务器的小工具,以及另一个小客户端工具。 我的目标是使该工具能够从客户端向服务器计算机发送命令。 这样我就可以从另一台机器在服务器计算机上执行某些操作,包括发送带有更新文件的zip存档。

我有基本设置:从客户端向服务器发送命令的TCP连接(服务器回复确认)然后我希望发生所谓的操作。 我现在的问题是:

从客户端向服务器发送文件(.zip)时,我应该通过TCP发送还是使用类似FTP的东西? 我不仅希望将文件发送到服务器,还要将其发送到提取和替换现有文件。

亲切的问候,Alex

编辑:这是我用于将文件从客户端传输到服务器,但文件没有达到完整大小的目的地.. 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(); } } 

serverSocket.accept()之后,您没有从套接字获取InputStream 。 在套接字上打开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(); 

请参阅以下工作示例: 通过套接字写入和读取文件