Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client)
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;
while ((zeile = br.readLine()) != null) {
System.out.println("Empfangen vom Client: " + zeile);
bw.write("OK\n");
bw.flush();
}
System.out.println("Client hat Verbindung geschlossen");
} 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);
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+"\n");
bw.flush();
System.out.println(br.readLine());
}
}
catch(IOException e) {
e.printStackTrace();
}
}
}
Ich hab hier immer noch ein Verständnisproblem, wenn ich den Server starte, und dann den Client starte bekomm ich auf der Konsole "Gebe etwas ein" angezeigt, dann kann ich etwas eingeben Enter drücken und dann kommt wieder "Gebe etwas ein" usw. Erst wenn ich das Programm schliesse wird mir "Empfangen vom Client: + meine Eingabe" angezeigt. Warum ist das so ?
Ich bin da ehrlich gesagt nicht so firm wie die JVM das handhabt, aber vermutlich wird der Buffer einfach nicht frueher rausgeschrieben. Du kannst mal probieren direkt nach dem println ein System,out.flush() aufzurufen.
Also ich kann das Fehlerbild nicht nachvollziehen. System.out wird zwar gepuffert aber das wird nicht so massiv verzögert. Vor allem erscheinen die Ausgaben direkt bei mir. Also sobald ich etwas gesendet habe, bekomme ich das OK beim Client und beim Server steht wenn ich schaue auch das "Empfangen vom Client: " ....
Daher wäre meine Frage: Was genau ist Dein Fehlerbild?
Dein Code habe ich bei mir 1:1 ausgeführt und ich sehe da alles soweit korrekt.