diff --git a/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java b/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java index fb6aeb02c32fbfe403dc7f84273dbc7827b4772f..81026c1fb961451aa921de4acdff401e3c656804 100644 --- a/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java +++ b/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java @@ -80,16 +80,16 @@ public class Client { info.close(); clientSocket.close(); break; - } else if (ausgabe.equals("PONG")) { - System.out.println(ausgabe); - } else if (ausgabe.substring(0, 4).equals("ECHO")) { + } else if (ausgabe.length()>3 && ausgabe.substring(0, 4).equals("ECHO")) { System.out.println(ausgabe.substring(5)); - } else if (ausgabe.substring(0, 4).equals("TIME")) { + } else if (ausgabe.length()>3 && ausgabe.substring(0, 4).equals("TIME")) { System.out.println(ausgabe.substring(5)); - } else if (ausgabe.substring(0, 4).equals("DATE")) { + } else if (ausgabe.length()>3 && ausgabe.substring(0, 4).equals("DATE")) { System.out.println(ausgabe.substring(5)); - } else if (ausgabe.substring(0, 5).equals("ERROR")) { + } else if (ausgabe.length()>4 && ausgabe.substring(0, 5).equals("ERROR")) { System.out.println(ausgabe.substring(6)); + } else { // Bei Ping, Verlauf etc: + System.out.println(ausgabe); } } } diff --git a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java index d2a7149acaf25eb3967558c91613d029d75cd6bf..393e01bb6c6ef7ecec8b3a3ecb534d7e3234bce8 100644 --- a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java +++ b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java @@ -38,17 +38,18 @@ public class Server{ Socket serverSocket = null; BufferedWriter zumClient; BufferedReader vomClient; - LinkedList<String> verlauf; + ArrayList<String> verlauf; try { ServerSocket tempSocket = new ServerSocket(2022); // Port wird festgelegt System.out.println("Warte auf Client..."); serverSocket = tempSocket.accept(); // Sobald cleint sich verbindet, geht es weiter System.out.println("Client hat sich verbunden!"); + tempSocket.close(); } catch (Exception e) { System.err.println("Probleme bei Verbidnungsherstellung zum CLient"); return; } - verlauf = new LinkedList<String>(); + verlauf = new ArrayList<String>(); try{ zumClient = new BufferedWriter(new OutputStreamWriter(serverSocket.getOutputStream())); vomClient = new BufferedReader(new InputStreamReader(serverSocket.getInputStream())); @@ -60,29 +61,96 @@ public class Server{ // Befehle Werden aufgenommen System.out.println("Erwarte Eingabe..."); boolean abbruch = false; + String eingabe = ""; while(!abbruch) { - String eingabe = ""; try{ eingabe = vomClient.readLine(); System.out.println("Eingabe vom Client: "+eingabe); + verlauf.add(eingabe); // Jede Anfrage wird sich gemerkt } catch (IOException e) { System.err.println("Probleme beim Lesen der Client-Eingabe"); abbruch = true; + try { + zumClient.write(" 500 INTERNAL SERVER ERROR\n"); + zumClient.flush(); + } catch (IOException f) { + System.err.println("Zusätzlicher Fehler beim Fehler Report an Client"); + } } - try{ // Jede mögliche Eingabe wird überprüft + // Jede mögliche Eingabe wird überprüft + try{ if(eingabe.equalsIgnoreCase("exit")){ abbruch = true; runs = false; // Server runned nicht mehr, zurück zum Konstruktor zumClient.write("EXIT\n"); zumClient.flush(); System.out.println("Der Server wird neugestartet"); + serverSocket.close(); } - if(eingabe.equalsIgnoreCase("ping")) { - zumClient.write("PONG"); + else if(eingabe.equalsIgnoreCase("ping")) { + zumClient.write("PONG\n"); zumClient.flush(); } + else if(eingabe.equalsIgnoreCase("current time")) { + zumClient.write("TIME "+new SimpleDateFormat("hh:mm:ss").format(new Date())+"\n"); + zumClient.flush(); + } + else if(eingabe.equalsIgnoreCase("current date")) { + zumClient.write("DATE "+new SimpleDateFormat("dd.MM.yyyy").format(new Date())+"\n"); + zumClient.flush(); + } + else if(eingabe.equalsIgnoreCase("history")) { + String ausg = "Gesamter Verlauf: "; + for(int i=0; i<verlauf.size()-1; i++) { + ausg = ausg.concat(verlauf.get(i)+", "); + } + ausg = ausg.concat(verlauf.get(verlauf.size()-1)+"\n"); + zumClient.write(ausg); + zumClient.flush(); + } + else if(eingabe.length()>=9 && eingabe.substring(0,7).equalsIgnoreCase("history")) { + int zahl = -1; + try{ + zahl = Integer.parseInt(eingabe.substring(8,eingabe.length())); + } catch (NumberFormatException e) { + System.out.println("Der Client muss Zahlen hinter history schreiben smh"); + zumClient.write("ERROR 400 BAD REQUEST\n"); // Bei falschem Aufruf + } + if (zahl>=verlauf.size()) { + String ausg = "Gesamter Verlauf: "; + for(int i=0; i<verlauf.size()-1; i++) { + ausg = ausg.concat(verlauf.get(i)+", "); + } + ausg = ausg.concat(verlauf.get(verlauf.size()-1)+"\n"); + zumClient.write(ausg); + } + else { + if(zahl>0) { + String ausg = "Verlauf der letzten "+zahl+" Anfragen: "; + for(int i=verlauf.size()-zahl; i<verlauf.size(); i++) { + ausg = ausg.concat(verlauf.get(i)+", "); + } + zumClient.write(ausg); + } + else { + zumClient.write("Super witzig"); + } + } + zumClient.flush(); + } + else { + zumClient.write("ERROR 400 BAD REQUEST\n"); // Bei falschem Aufruf + zumClient.flush(); + } + } catch (IOException | NullPointerException e) { System.err.println("Fehler beim schreiben zum Client"); + try { + zumClient.write("ERROR 500 INTERNAL SERVER ERROR\n"); + zumClient.flush(); + } catch (IOException f) { + System.err.println("Zusätzlicher Fehler beim Fehler Report an Client"); + } abbruch = true; runs = false; }