Java 文件传输文件到服务器
Java file transfer file to server
我是 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();
}
}
您没有从 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();
我是 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();
}
}
您没有从 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();