Pregunta

Es un simple cliente-servidor, donde Servidor con un objeto BufferedWriter enviaría a la Cliente recibir en el BufferedReader objeto.

Cuando uso OutputStream y PrintWriter para el Servidor y InputStream y Scanner para el Cliente que funciona bien.

Lo que sucede es que el cliente en tamponada manera lee -1 si estoy enviando un int y nula Cadena .

Espero que mi Inglés tiene sentido. ; P

Ese es el código:

Servidor

import java.io.*;
import java.net.*;

public class Server {

    public static void main(String[] args) throws IOException {

        ServerSocket server = new ServerSocket(8189);
        Socket incoming;

        incoming = server.accept();
        try {
            // OutputStream output = incoming.getOutputStream();
            // PrintWriter outStream = new PrintWriter(output, true /*autoFlush*/);
            // outStream.println("ENTER");
            BufferedWriter output = new BufferedWriter(new           
                                    OutputStreamWriter(incoming.getOutputStream()));
            output.write(3);
            System.out.println("\nSent");

        } finally {
            incoming.close();
        }
    }
}

Cliente

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client {

    public static void main(String[] args) throws UnknownHostException, IOException {

        //Client theClient= new Client();
        Socket RTSPSocket;
        int ServerPort = 8189;
        //server name address
        String ServerHost = "localhost";

        //get Server IP Address
        InetAddress ServerIPAddress = InetAddress.getByName(ServerHost);

        RTSPSocket = new Socket(ServerIPAddress, ServerPort);

        try {
            /*
            InputStream input = theClient.RTSPSocket.getInputStream();
            Scanner in = new Scanner(input);
            String line = in.nextLine();
            System.out.println(line);
            */

            BufferedReader input = new BufferedReader(new  
                                   InputStreamReader(RTSPSocket.getInputStream()));

            //String line = input.readLine();
            //System.out.println("\nRicevuto: " + line);
            System.out.println(input.read());
        } catch (Exception e) {
            System.err.println("Error: " + e);
        }
    }
}
¿Fue útil?

Solución

Hay que lave los datos a recibirlos en la parte del cliente.

        output.write(3);
        output.flush();
        System.out.println("\nSent");

Cuando usted tiene un OutputStream (o un escritor) hay que eliminar sus datos, de esta manera que esté 100% seguro de que lo que quería ser de envío ha sido enviado.

La mayoría (si no todos) los subclases OutputStream utilizan un "mini memoria intermedia", que se lava solamente cuando está lleno o llamar manualmente flush(). En su caso, es aún más flagrante porque estás usando una BufferedWriter.

Otra cosa, cuando se utiliza corrientes / escritores, que realmente debería cerrarlas después de que haya terminado, uno de los principales cosa close() hacer (la mayor parte del tiempo) está desechando los últimos datos restantes en la "mini búfer".


Recursos:

Otros consejos

trate de poner el código siguiente después output.write (3);

output.flush();

El BufferedOutputStream está construido para enviar sólo los datos cuando el búfer está lleno (creo que el valor predeterminado de 1024 bytes). Por lo tanto, para forzar los datos para ser enviados necesita para eliminar la corriente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top