Ich habe das folgende Problem. Ich habe einen einfachen Echo Server und Echo Client programmiert, aber das Problem ist, dass in der Schleife des Servers, wo ich vom gepufferten Reader lese, das Programm stecken bleibt und es nicht schreiben wird.PrintWriter wird nicht schreiben
import java.net.*;
import java.util.*;
import java.io.*;
public class SimpleServer {
public static void main(String[] args) {
System.out.println("Dies ist ein simpler Echo Server");
int port = 6000;
try {
ServerSocket server = new ServerSocket(port);
//server.setSoTimeout(30000);
System.out.println("Warte auf anfrage");
Socket client = server.accept();
InputStream is = client.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
String message = null;
while ((message = reader.readLine())!=null) {
System.out.println("Nachricht vom Client "+message);
}
OutputStream os = client.getOutputStream();
PrintWriter writer = new PrintWriter(os);
System.out.println(message);
writer.println(message);
writer.flush();
writer.close();
} catch(IOException e) {
e.printStackTrace();
} // end of try
} // end of main
} // end of class SimpleServer
Aber wenn ich die .println()
und .flush()
in der Schleife setzen alles funktioniert super.
import java.net.*;
import java.util.*;
import java.io.*;
public class SimpleServer {
public static void main(String[] args) {
System.out.println("Dies ist ein simpler Echo Server");
int port = 6000;
try {
ServerSocket server = new ServerSocket(port);
//server.setSoTimeout(30000);
System.out.println("Warte auf anfrage");
Socket client = server.accept();
InputStream is = client.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
OutputStream os = client.getOutputStream();
PrintWriter writer = new PrintWriter(os);
String message;
while ((message = reader.readLine())!=null) {
System.out.println("Nachricht vom Client "+message);
writer.println(message);
writer.flush();
}
writer.close();
} catch(IOException e) {
e.printStackTrace();
} // end of try
} // end of main
} // end of class SimpleServer
Meine Frage ist, warum es in der Schleife stecken?
Thx für Ihre Antwort. Ja, ich habe erwartet, dass der Stream eine Null gibt, wenn er leer ist. Aber natürlich macht das keinen Sinn. Aber um Text zu lesen, der in seiner Länge und seinen Zeilen variabel ist. Gibt es etwas Ähnliches die 'Scanner' Methode' hasNext() '. Um sicherzustellen, dass der Server nach dem Lesen des gesamten Textes den Loop verlässt? – Torben