M
Marco123
Gast
Hallo,
ich schreibe gerade eine einfache Client-Server-Anwendung, bei der Nachrichten per PrintWriter und BufferedReader zwischen Server und Client hin- und hergeschickt werden sollen.
Sowohl Server als auch Client enthalten dafür die folgenden beiden Methoden, denen jeweils der vorher erzeugte Socket, über den sich Client und Server verbunden haben, übergeben wird:
Wenn ich das Programm mit diesen Methoden ausführe, sendet der Client eine Nachricht an den Server. Die Server-Anwendung empfängt die Nachricht jedoch nicht und bleibt einfach "stehen".
Nun habe ich schon eine Weile gegooglet und herausgefunden, dass ich die schreibe-Methoden nach dem Senden der Nachricht um ein
ergänzen muss.
Obwohl ich nicht ganz verstanden habe warum, wird die Nachricht nun vom Server empfangen und dieser schickt eine Nachricht an den Client zurück. Jetzt empfängt der Client die Nachricht jedoch nicht mehr (bzw. nur noch eine leere Nachricht), mit der Begründung "Socket is closed". Scheinbar wurde beim Schließen des PrintWriters gleich der ganze Socket geschlossen, den ich jedoch für die weitere Kommunikation zwischen Client und Server noch brauche.
Gibt es eine Möglichkeit den PrintWriter zu schließen (warum muss man das überhaupt tun?), ohne den Socket mit zu schließen?
ich schreibe gerade eine einfache Client-Server-Anwendung, bei der Nachrichten per PrintWriter und BufferedReader zwischen Server und Client hin- und hergeschickt werden sollen.
Sowohl Server als auch Client enthalten dafür die folgenden beiden Methoden, denen jeweils der vorher erzeugte Socket, über den sich Client und Server verbunden haben, übergeben wird:
Java:
// Methode, die eine Nachricht per PrintWriter in den Socket schreibt
private void schreibe (Socket s, String nachricht) {
try {
// PrintWriter erzeugen
PrintWriter pWriter =
new PrintWriter(
new OutputStreamWriter(
s.getOutputStream() ));
// Nachricht senden
pWriter.print(nachricht);
}
catch (IOException e) {
System.out.println("IOException!");
}
}
// Methode, die eine Nachricht per BufferedReader aus dem Socket einliest und an die aufrufende Methode zurückgibt
private String lese (Socket s) {
// Paltzhalter für die zu empfangende Nachricht
String nachricht = "";
try {
// BufferedReader erzeugen
BufferedReader bReader =
new BufferedReader(
new InputStreamReader(
s.getInputStream() ));
// Nachricht empfangen
nachricht = bReader.readLine();
}
catch (IOException e) {
System.out.println("IOException!");
}
// Nachricht zurückgeben
return nachricht;
}
Wenn ich das Programm mit diesen Methoden ausführe, sendet der Client eine Nachricht an den Server. Die Server-Anwendung empfängt die Nachricht jedoch nicht und bleibt einfach "stehen".
Nun habe ich schon eine Weile gegooglet und herausgefunden, dass ich die schreibe-Methoden nach dem Senden der Nachricht um ein
Code:
pWriter.close();
Obwohl ich nicht ganz verstanden habe warum, wird die Nachricht nun vom Server empfangen und dieser schickt eine Nachricht an den Client zurück. Jetzt empfängt der Client die Nachricht jedoch nicht mehr (bzw. nur noch eine leere Nachricht), mit der Begründung "Socket is closed". Scheinbar wurde beim Schließen des PrintWriters gleich der ganze Socket geschlossen, den ich jedoch für die weitere Kommunikation zwischen Client und Server noch brauche.
Gibt es eine Möglichkeit den PrintWriter zu schließen (warum muss man das überhaupt tun?), ohne den Socket mit zu schließen?