我正在尝试创建一个 FileEchoServer。发送一个文件没有问题。但是如果我尝试将文件发送回客户端,我的第一个文件的接收器仍然打开。我尝试使用 outputStream.flush(); 在客户的输出流上,但它没有帮助。下面的代码是一体的服务器和客户端。我希望有人可以帮助我,因为我找不到我的错。
public class Main {
private static int PORT = 5864;
public static void main(String[] args) throws Exception{
String[] options = new String[] {"Server", "Client"};
int response = JOptionPane.showOptionDialog(null, "Start Client or Server?", "Choose",
JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,
null, options, options[0]);
switch (response){
case(0):
Server();
break;
case(1):
Client();
break;
case(-1):
System.exit(0);
}
}
private static void Server() throws Exception{
ServerSocket serverSocket = new ServerSocket(PORT);
Socket socket = serverSocket.accept();
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
File tempFile = File.createTempFile("i dont", "care");
tempFile.deleteOnExit();
FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
pushStream(inputStream, fileOutputStream);
fileOutputStream.close();
FileInputStream fileInputStream = new FileInputStream(tempFile);
pushStream(fileInputStream, outputStream);
fileInputStream.close();
inputStream.close();
outputStream.close();
socket.close();
serverSocket.close();
}
private static void Client() throws Exception{
String HOST = "localhost";
Socket socket1 = new Socket(HOST, PORT);
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
FileInputStream fileInputStream = new FileInputStream("C:\\Users\\jerem\\Desktop\\Senden Client\\image_test.png");
pushStream(fileInputStream, outputStream);
fileInputStream.close();
FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\\Users\\jerem\\Desktop\\Recieve Client\\dateiAngekommen.png"));
pushStream(inputStream, fileOutputStream);
fileOutputStream.close();
fileInputStream.close();
outputStream.close();
inputStream.close();
socket.close();
}
private static void pushStream(InputStream inputStream, OutputStream outputStream) throws Exception{
byte[] bytes = new byte[16 * 1024];
int count;
while ((count = inputStream.read(bytes)) > 0) {
System.out.println(count);
outputStream.write(bytes, 0, count);
}
System.out.println("Done");
}
}