Método PrintWriter println(String s): ¿no es compatible?
-
12-12-2019 - |
Pregunta
Estoy creando una aplicación de servidor cliente de chat multiproceso.En la conexión del servidor utilizo el método PrintWriter println(String s) para escribir la respuesta al cliente.
PrintWriter out;
String msg = in.readLine();
String response = "";
if (msg.startsWith("nick: ") {
response = protocol.authenticate(msg); //returns a String that says "welcome " + nick
//if there are messages pending for the author who logged in add them to the response String
response+="\r\n"+textmsg;
} else { ... }
out.println(response);
Cuando ejecuto el cliente, que usa el método BufferedReader readLine() para leer desde el servidor, recibo el mensaje de bienvenida pero no el mensaje pendiente para el cliente, pero si uso
response+=textmsg;
funciona, así que supongo que es porque estoy usando pero aún necesito imprimir una nueva línea entre esos dos mensajes.¿Qué tengo que hacer?
Editar después de aceptar la respuesta:Al final elegí usar OutputStream y InputStream para poder enviar todo tipo de cadena que quiera, incluso con .
Solución
Cualquier llamada println
una vez para cada línea de salida (es decir, dos veces) o use solo \n
, sin el \r
.Ese es el carácter de nueva línea estándar de Java y \r\n
es una secuencia de fin de línea específica de Windows.Por supuesto, al final del cliente ahora tienes que llamar readLine
dos veces también.No hay manera de llamar readLine
una vez y obtener dos líneas.Si necesita un delimitador personalizado, entonces debe usar algo más, no \n
.
Otros consejos
Utilice la impresión con PrintWriter, para el \ n.
Use println
o use %n
con printf