From ad151110969597897369120d69655793676fafe9 Mon Sep 17 00:00:00 2001
From: philipp023_ <Philipp.Lachowski@tu-dortmund.de>
Date: Sat, 10 Dec 2022 17:25:58 +0100
Subject: [PATCH] Ich checke nicht, warum der In und Output nicht funktioniert.
 Vlt switche ich runter von Bufferedreadern und Writern

---
 .../src/heimaufgaben/Client.java              | 94 +++++--------------
 .../src/heimaufgaben/Main.java                |  2 +-
 .../src/heimaufgaben/Server.java              | 65 ++++++++++++-
 3 files changed, 82 insertions(+), 79 deletions(-)

diff --git a/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java b/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java
index d8f6e1e..da4c0fe 100644
--- a/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java
+++ b/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java
@@ -10,7 +10,8 @@ import java.text.*;
 public class Client {
     private BufferedWriter zumServer;
     private BufferedReader vomServer;
-    public Client() throws IOException{
+
+    public Client() throws IOException {
 
         // Lokale Variablen (Nach Konstruktor nicht mehr nötig)
         String ip = "";
@@ -25,7 +26,7 @@ public class Client {
         String portFragezeichen = info.readLine();  // Port ist vorerst String
 
         // Port muss vom String zum Int werden:
-        try{
+        try {
             port = Integer.parseInt(portFragezeichen);
         } catch (NumberFormatException e) { // Falls er keine Zahl ist
             System.err.println("Der Port ist keine Zahl!");
@@ -33,14 +34,13 @@ public class Client {
         }
 
         // Wenn falsche IP oder port eingegeben wird:
-        if(!ip.equals("127.0.0.1")){
-            if(!ip.equals("localhost"))
-            {
+        if (!ip.equals("127.0.0.1")) {
+            if (!ip.equals("localhost")) {
                 System.err.println("Falsche IP!");
                 return;
             }
         }
-        if(port != 2022){
+        if (port != 2022) {
             System.err.println("Falscher Port!");
             return;
         }
@@ -63,77 +63,25 @@ public class Client {
         }
 
         // Eingaben werden aufgenommen und bearbeitet bis "close":
-        System.out.println("Verbindung hergestellt, erwarte Auftrag:");
-        while(clientSocket.isConnected())
-        {
+        System.out.println("Verbindung hergestellt. erwarte Auftrag:");
+        while (clientSocket.isConnected()) {
             String eingabe = info.readLine();
-            if(eingabe.equalsIgnoreCase("close")){
+            zumServer.write(eingabe); // Alles wird an den Server geschickt
+            String ausgabe = vomServer.readLine();  // Ausgabe vom Server wird verglichen
+            if (ausgabe.equals("EXIT")) {
                 clientSocket.close();
                 info.close();
-                break;
-            }
-            else if(eingabe.equalsIgnoreCase("ping")){
-                ping();
-            }
-            else if(eingabe.substring(0,4).equalsIgnoreCase("echo")){
-                echo(eingabe);
+            } else if (ausgabe.equals("PONG")) {
+                System.out.println(ausgabe);
+            } else if (ausgabe.substring(0, 4).equals("ECHO")) {
+                System.out.println(ausgabe.substring(5));
+            } else if (ausgabe.substring(0, 4).equals("TIME")) {
+                System.out.println(ausgabe.substring(5));
+            } else if (ausgabe.substring(0, 4).equals("DATE")) {
+                System.out.println(ausgabe.substring(5));
+            } else if (ausgabe.substring(0, 5).equals("ERROR")) {
+                System.out.println(ausgabe.substring(6));
             }
-            else if(eingabe.equalsIgnoreCase("current time")){
-                time();
-            }
-            else if(eingabe.equalsIgnoreCase("current date")){
-                date();
-            }
-        }
-        // "close" -> While schleife endet, constructor endet, client ist beendet
-    }
-
-    // Aufruf "ping":
-    private void ping() throws IOException{
-        try {
-            zumServer.write("PING");
-            System.out.println(vomServer.readLine());   // Gibt Antwort des Servers direkt aus
-        } catch (IOException e) {
-            System.err.println("Probleme bei void Ping() (IOException)");
-            return;
-        }
-    }
-
-    // Aufruf "echo":
-    private void echo(String eingabe) throws IOException{
-        try {
-            zumServer.write(eingabe);   // Ganze Botschaft samt ECHO an Server geben
-            System.out.println(kuerzen(vomServer.readLine()));  // Entfernen von "ECHO "
-        } catch (IOException e) {
-            System.err.println("Probleme bei void Echo() (IOException)");
-            return;
-        }
-    }
-
-    // Aufruf "current time":
-    private void time() throws IOException{
-        try {
-            zumServer.write("CURRENT TIME");
-            System.out.println(kuerzen(vomServer.readLine()));  // Entfernen von "TIME "
-        } catch (IOException e) {
-            System.err.println("Probleme bei void Time() (IOException)");
-            return;
         }
     }
-
-    // Aufruf "current date":
-    private void date() throws IOException{
-        try {
-            zumServer.write("CURRENT DATE");
-            System.out.println(kuerzen(vomServer.readLine()));  // Entfernen von "DATE "
-        } catch (IOException e) {
-            System.err.println("Probleme bei void Date() (IOException)");
-            return;
-        }
-    }
-
-    // Kürzen der ersten 5 Buchstaben, gebraucht für ECHO, TIME, DATE:
-    private String kuerzen(String eingabe) {
-        return eingabe.substring(5);
-    }
 }
diff --git a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Main.java b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Main.java
index 03a0299..c27bf8c 100644
--- a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Main.java
+++ b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Main.java
@@ -8,7 +8,7 @@ import java.util.*;
 import java.text.*;
 
 public class Main {
-    public static void main(String[] args) {
+    public static void main(String[] args) throws IOException {
         Server server = new Server();
         System.out.println("Der Server wurde beendet.");
     }
diff --git a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
index b7dd3f3..aca3571 100644
--- a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
+++ b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
@@ -8,27 +8,82 @@ import java.util.*;
 import java.text.*;
 
 public class Server{
+    private boolean runs = false;   // Ist ein Client connected?
+    private boolean shutdown = false;   // Möchte ich den server beenden?
 
     public Server() throws IOException{
-        this.neuerServer();
+        while(!shutdown) {
+            if(!runs) {
+                runs = true;
+                BufferedReader prt = new BufferedReader(new InputStreamReader(System.in));
+                System.out.println("Bitte Porteingabe...");
+                try{
+                    if (Integer.parseInt(prt.readLine()) == 2022) {
+                        neuerServer();
+                    }
+                    else {
+                        System.err.println("Falscher Port, momentan ist nur Port 2022 möglich");
+                        runs = false;
+                    }
+                } catch (NumberFormatException e) {
+                    System.err.println("Es dürfen nur Zahlen eingegeben werden!");
+                    runs = false;
+                }
+            }
+        }
     }
 
     private void neuerServer(){
         // Lokale Variablen (Nach Methode ist Server beendet)
-        Socket serverSocket;
+        Socket serverSocket = null;
         BufferedWriter zumClient;
         BufferedReader vomClient;
         LinkedList<String> verlauf;
         try {
-            ServerSocket tempSocket = new ServerSocket(2022);
+            ServerSocket tempSocket = new ServerSocket(2022);   // Port wird festgelegt
             System.out.println("Warte auf Client...");
-            serverSocket = tempSocket.accept();
-        } catch (IOException e) {
+            serverSocket = tempSocket.accept(); // Sobald cleint sich verbindet, geht es weiter
+            System.out.println("Client hat sich verbunden!");
+        } catch (Exception e) {
             System.err.println("Probleme bei Verbidnungsherstellung zum CLient");
+            return;
         }
         verlauf = new LinkedList<String>();
         try{
             zumClient = new BufferedWriter(new OutputStreamWriter(serverSocket.getOutputStream()));
+            vomClient = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
+        } catch (IOException e) {
+            System.err.println("Probleme mit dem Bufferedwriter/reader");
+            return;
+        }
+
+        // Befehle Werden aufgenommen
+        System.out.println("Erwarte Eingabe...");
+        boolean abbruch = false;
+        while(!abbruch) {
+            String eingabe = "";
+            try{
+                eingabe = vomClient.readLine();
+                System.out.println("Eingabe vom Client: "+eingabe);
+            } catch (IOException e) {
+                System.err.println("Probleme beim Lesen der Client-Eingabe");
+                abbruch = true;
+            }
+            try{
+                if(eingabe.equalsIgnoreCase("exit")){
+                    abbruch = true;
+                    runs = false;
+                    zumClient.write("EXIT");
+                }
+                if(eingabe.equalsIgnoreCase("ping")) {
+                    zumClient.write("PONG");
+                }
+            } catch (IOException | NullPointerException e) {
+                System.err.println("Fehler beim schreiben zum Client");
+                abbruch = true;
+                runs = false;
+            }
+
         }
 
     }
-- 
GitLab