Verständnisproblem bei Server/Client

Käsekuchen

Mitglied
Das hier ist die Aufgabenstellung:
  1. a) Schreiben Sie einen TCP Server, der wiederholt Textzeilen von einem Client empfangen kann. Der Server sendet dem Client nach jeder empfangenen Zeile ein OK zurück.
  2. b) Schreiben Sie einen TCP Client, der wiederholt von der Standardeingabe Textzeilen liest und diese an den Server aus Aufgabenteil a) sendet.
    Code:
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.InputStreamReader;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    
    public class server {
        
        public static void main(String[]args) {
            try(ServerSocket ss = new ServerSocket(5554);)
            {
                while(true) {
                    try(Socket connection = ss.accept();
                        OutputStream os = connection.getOutputStream();
                        InputStream is = connection.getInputStream();
                        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
                        BufferedReader br = new BufferedReader(new InputStreamReader(is));)
                    
                    {
                        String zeile = br.readLine();
                        bw.write("OK");
                        bw.flush();
                    }
                    catch(IOException e) {
                        e.printStackTrace();
                    }
                    
                }
            }
            catch(IOException e) {
                e.printStackTrace();
            }
            
        }
    }
    Code:
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;
    import java.io.OutputStream;
    import java.io.InputStream;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    
    public class client {
        public static void main(String [] args) {
            try(Socket connection = new Socket("localhost",5554);)
            {
                Scanner s = new Scanner(System.in);
                while(true) {
                    try(OutputStream os = connection.getOutputStream();
                        InputStream is = connection.getInputStream();
                        BufferedReader br = new BufferedReader(new InputStreamReader(is));
                        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));)
                    {
                        
                        while(true) {
                        System.out.println("Gebe etwas ein");
                        String x = s.next();
                        bw.write(x);
                        
                        System.out.println(br.readLine());
                        }
                    }
                    catch(IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            catch(IOException e) {
                e.printStackTrace();
            }
        }
    }
    Wenn ich jetzt den Server und den Client starte wir mir in der Konsole "Gebe etwas ein" angezeigt, dann kann ich so oft wie ich will etwas eingeben, es passiert aber sonst garnichts. Warum wird denn nicht "OK" ausgegeben ? Ich hab da das totale Verständnisproblem
 
Das erste Problem ist, dass Du keine Zeilenumbrüche sendest. Daher wird ein readLine immer weiter lesen und halt nie ein Zeilenende bekommen.

Dann ist die Schleife falsch - in der while true Schleife hast Du die try-with-resources drin - nach der ersten Zeile werden also die Verbindungen Streams geschlossen.

Edit: Nicht die Verbindung wird geschlossen, aber die Streams. Damit kann da nichts mehr gesendet oder gelesen werden. Die Connection bleibt aber wohl offen und bestehen. Müsste man austesten. Ist hier unkritisch - ist halt ein Fehler im Code - aber die Beschreibung des Fehlers war nicht 100% exakt.
 

Zurück
Oben