socketclient socket examples example java sockets network-programming ou

java - examples - Escribir en el socket outputStream sin cerrarlo



socketclient java (4)

En la mayoría de los protocolos, el servidor acepta algún tipo de símbolo EOF. Envíe dicho símbolo en lugar de cerrar la transmisión.

Por ejemplo, los servidores de IRC interpretan "/ r / n" como el final de un mensaje. Esto sería 2 mensajes en un OutputStream abierto:

PrintStream printStream = new PrintStream(socket.getOutputStream()); printStream.print("JOIN #channel1/r/n"); printStream.flush( ); printStream.print("JOIN #channel2/r/n"); printStream.flush( );

Además, debe envolver su outputStream con DataOutputStream. Esta envoltura crea más salida portátil. Plain OutputStream puede causar problemas con ciertos tipos de datos primitivos si el servidor y el cliente tienen diferentes arquitecturas de computadora.

Me gustaría escribir algunos mensajes en el servidor. Cada vez, solo para el envío de tranvías, cierro el outputStream y lo vuelvo a abrir cuando tengo que enviar el siguiente mensaje.

os.write(msgBytes); os.write("/r/n".getBytes()); os.flush(); os.close();

¿Cómo puedo mantener abierto este OutputStream, os, y aún así poder enviar el mensaje?

Gracias.


Envuelva el OutputStream del Socket en un PrintWriter y llame al método println del println .

PrintWriter pw = new PrintWriter(socket.getOutputStream()); .... pw.println(message); // call repeatedly to send messages. .... pw.close(); // when finished writing to server and want to close conn.


Yo me estoy perdiendo algo aqui. Si no llamas cerca, no se cerrará. Por ejemplo,

os.write(msgBytes); os.write("/r/n".getBytes()); os.flush(); // Do something os.write("more message"); os.flush(); // When you are finally done os.close();


He encontrado el problema y está del lado del cliente. En el cliente, he usado -

count = inputStream.read(buffer)) > -1

Eso significa que el cliente espera hasta que se cierre el outputStream del servidor y luego procesa los datos entrantes.