From 180090370fff70c95d207f09fff0e35da57c48af Mon Sep 17 00:00:00 2001
From: philipp023_ <Philipp.Lachowski@tu-dortmund.de>
Date: Sun, 11 Dec 2022 14:42:44 +0100
Subject: [PATCH] =?UTF-8?q?Paar=20kleine=20Sachen=20wurden=20ordentlicher?=
 =?UTF-8?q?=20gemacht,=20Dokumentation=20wurde=20ganz=20hinzugef=C3=BCgt?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 AufgabenStuff/Dokumentation.txt               | 60 ++++++++++++++++++-
 .../src/heimaufgaben/Server.java              |  8 ++-
 2 files changed, 64 insertions(+), 4 deletions(-)

diff --git a/AufgabenStuff/Dokumentation.txt b/AufgabenStuff/Dokumentation.txt
index 3185ee7..118b4fd 100644
--- a/AufgabenStuff/Dokumentation.txt
+++ b/AufgabenStuff/Dokumentation.txt
@@ -1,4 +1,62 @@
 Dokumentation
 =============
 
-...
+Client:
+
+Der Client fragt über einen Bufferedreader "info" zuerst Ip-Adresse und Port ab.
+Bei falschen Infos wird er beendet.
+
+Nachdem der clientSocket erstellt wurde versucht der Client eine Kommunikationsverbindung mit 
+BufferedWriter "zumServer"und BufferedReader "vomServer" herzustellen.
+
+Solange der clientSocket connected ist hört der Client dann auf Eingaben.
+Jede Eingabe des Clients wird nun an den Server geschickt und die Antworten des Servers werden abgeglichen.
+Die Antworten EXIT ECHO TIME DATE und ERROR sind die besonderen Ausgaben. Bei den letzten vier werden genau
+diese Worte vom Anfang der Servernachricht abgetrennt und der Rest wird ausgegeben.
+EXIT beendet den Client indem der Bufferedreader "info" und der clientSocket geschlossen werden.
+
+Bei allen anderen Serverausgaben wie zum Beispiel "PONG" oder der beim Verlauf,
+wird die Nachricht unverändert ausgegeben.
+
+
+Server:
+
+Der Server funktioniert anders. Sobald sich ein Client disconnected ist der Server bereit,
+eine neue Verbindung herzustellen.
+So setzt der Server beim starten von void neuerServer() den boolean "runs" auf true, sodass erstmal
+nichts weiter passiert während der Server läuft. Dieser wird auch nur erstellt, falls der richtige Port
+im BufferedReader prt eingegeben wird.
+
+In neuerServer() wird der Server erstellt. Ein ServerSocket mit dem richtigen Port wird erstellt und
+wartet auf den Client. In dem Socket "serverSocket" (Nicht verwechseln mit dem ServerSocket "tempSocket")
+wird dann die Verbindung mit accept() hergestellt.
+
+Sobald das passiert wird wie beim Client ein BufferedWriter und ein Reader für Out- und Input deklariert und
+initialisiert. 
+Ebenso wird für den folgenden Verlauf eine ArrayList angelegt.
+
+Wenn das alles Problemlos klappt, dann kommt der Server in die Schleife in welcher er auf Eingaben wartet.
+Solange boolean abbruch false ist, wird die while-Schleife nicht abgebrochen und erwartet immer neue Eingaben.
+
+Jede Eingabe vom Client wird erstmal aufgenomen, ausgegeben und im Verlauf gespeichert.
+Nun wird sie mit allen möglichen Eingaben verglichen.
+Eingabe Ping liefert PONG zurück, Echo schickt die Eingabe direkt zurück. Current Time und Current Date erstellen
+mit der Klasse SimpleDateFormat jeweils eine Antwort mit der Uhrzeit und mit dem Datum.
+
+Die Eingabe History unterscheidet zwischen "history" und "history int".
+history iteriert einfach durch den gesamten Verlauf, speichert diesen im String "ausg" und schickt diesen dann
+an den Client.
+history int macht das gleiche, falls der Integer über der Anzahl an Elementen im Verlauf liegt.
+Jener Integer wird isoliert, indem der String ab Stelle 9 in einen Int umgewandelt wird (Falls möglich natürlich).
+Bei etwas anderem als einem Int wird die interne fehler-boolean-Variable in dieser If-Verzweigung auf true gesetzt,
+damit diese nicht weiter versucht damit zu arbeiten.
+Falls die Zahl negativ ist wird auch ein Fehler ausgegeben.
+
+Die Eingabe Exit setzt die abbruch-Variable auf true und runs auf false, sodass nach Beendigung des Servers im
+Konstruktor ein neuer erstellt wird.
+Zuvor antwortet der Server jedoch noch dem Client und bestätigt das Exit und schließt den serverSocket.
+Alle möglichen Fehler werden ebenso an den Client geschickt und gehandelt
+______________________________
+
+Philipp Lachowski 235486
+Nicolas Mateischek 225979
diff --git a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
index 65665ab..dcc2c1a 100644
--- a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
+++ b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
@@ -19,13 +19,16 @@ public class Server{
                 System.out.println("Bitte Porteingabe...");
                 try{
                     if (Integer.parseInt(prt.readLine()) == 2022) {
+                        prt.close();
                         neuerServer();
                     }
                     else {
+                        prt.close();
                         System.err.println("Falscher Port, momentan ist nur Port 2022 möglich");
                         runs = false;
                     }
                 } catch (NumberFormatException e) {
+                    prt.close();
                     System.err.println("Es dürfen nur Zahlen eingegeben werden!");
                     runs = false;
                 }
@@ -38,7 +41,6 @@ public class Server{
         Socket serverSocket = null;
         BufferedWriter zumClient;
         BufferedReader vomClient;
-        ArrayList<String> verlauf;
         try {
             ServerSocket tempSocket = new ServerSocket(2022);   // Port wird festgelegt
             System.out.println("Warte auf Client...");
@@ -49,7 +51,7 @@ public class Server{
             System.err.println("Probleme bei Verbidnungsherstellung zum CLient");
             return;
         }
-        verlauf = new ArrayList<String>();
+        ArrayList<String> verlauf = new ArrayList<String>();;  // History
         try{
             zumClient = new BufferedWriter(new OutputStreamWriter(serverSocket.getOutputStream()));
             vomClient = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
@@ -59,7 +61,7 @@ public class Server{
         }
 
         // Befehle Werden aufgenommen
-        System.out.println("Erwarte Eingabe...");
+        System.out.println("Erwarte Eingaben...");
         boolean abbruch = false;
         String eingabe = "";
         while(!abbruch) {
-- 
GitLab