1

我正在尝试创建一个 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");
}

}

4

0 回答 0