From 526e64213428d3c790aeac20649c263a0d405c89 Mon Sep 17 00:00:00 2001 From: philipp023_ <Philipp.Lachowski@tu-dortmund.de> Date: Sat, 10 Dec 2022 21:39:55 +0100 Subject: [PATCH] =?UTF-8?q?Weitestgehend=20fertig=20(ohne=20Http=20api=20s?= =?UTF-8?q?tuff),=20History=20Zahl=20f=C3=BCr=20viable=20Zahl=20geht=20noc?= =?UTF-8?q?h=20nicht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/heimaufgaben/Client.java | 12 +-- .../src/heimaufgaben/Server.java | 80 +++++++++++++++++-- 2 files changed, 80 insertions(+), 12 deletions(-) diff --git a/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java b/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java index fb6aeb0..81026c1 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 d2a7149..393e01b 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; } -- GitLab