Verständnis Problem bei Server/Client

Käsekuchen

Mitglied
Folgendes 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.

Java:
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 den Server starte und dann den Client starte bekomm ich auf der Konsole "Gebe etwas an" angezeigt, dann kann ich so oft wie ich will etwas eingeben aber es passiert nichts. Es müsste doch eigentlich "OK" ausgegeben werden oder ? aber warum passiert das nicht ? Ich hab da das totale Verständnisproblem
 
a) Du sendest ja auch nie einen Zeilenumbruch. Das readLine() beim Server wartet aber auf einen Zeilenumbruch.
b) Dein Server sendet auch ein OK ohne Zeilenumbruch. Daher wird das readLine() beim Client auch nie beendet.
c) Dein Server beendet die Verbindung, sobald er etwas empfangen hat und das OK gesendet hat. Das dürfte die Anforderung bezüglich "wiederholt Textzeilen von einem Client empfangen" nicht erfüllen.
 
Lasse dir doch mal die Daten im Server auf der Konsole aus geben.
Dann wirst du merken ob du Zeilen weise oder Zeichen weise arbeitest.
 

Neue Themen


Zurück
Oben