/media/sda-magnetic/david/Dok-15-2023-11-27/fernuni-hagen/cs-i-ii/old-cs-2-03/java-new/2021-01-08/SimpleFileServer.java


import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleFileServer {
    
    public final static int SERVER_PORT = 8181;
    
    public static void main (String [] args) throws IOException {
        ServerSocket servsock = null;
        Socket sock = null;
        BufferedInputStream fromFile = null;
        
        try {
            servsock = new ServerSocket (SERVER_PORT);
            while (true) {
                try {
                    System.out.println ("Server bereit an Port " + SERVER_PORT);
                    sock = servsock.accept ();
                    
                    BufferedReader fromClient = new BufferedReader (new InputStreamReader (sock.getInputStream (), "UTF-8"));
                    
                    String request = fromClient.readLine ();
                    if (!request.startsWith ("GET "))
                        throw new IllegalArgumentException (request);
                    String fileName = request.substring (4);
                    fromFile = new BufferedInputStream (new FileInputStream (fileName));
                    
                    BufferedOutputStream toClient = new BufferedOutputStream (sock.getOutputStream ());
                    
                    int data = -1;
                    while ((data = fromFile.read()) != -1) {
                        toClient.write (data);
                    }
                    toClient.flush ();
                    System.out.println ("Datei " + fileName + " wurde an " + sock.getInetAddress () + " uebertragen");
                }
                catch (IllegalArgumentException e) {
                    System.out.println ("Ungueltige Anfrage: " + e.getMessage ());
                }
                catch (FileNotFoundException e) {
                    System.out.println ("Datei kann nicht gelesen werden: " + e.getMessage ());
                }
                catch (IOException e) {
                    System.out.println (e.getMessage ());
                }
                finally {
                    if (fromFile != null) {
                        fromFile.close ();
                    }
                    if (sock != null) {
                        sock.close ();
                    }
                }
            }
        }
        finally {
            if (servsock != null) {
                servsock.close ();
            }
        }
    }
}