ashur
ashur

Reputation: 4337

Java: BufferedReader and OutputStream

I've got the following code, I'm trying to send data text by sockets. But when I try to send via PrintWriter, my client does nothing and it stops at in.readLine(). However when I use simply OutputStream and send it as bytes, my client doesn't have any problem with reading. Is it possible to as I want ?

        out = new PrintWriter(sock.getOutputStream());
        in = new BufferedReader(new InputStreamReader(sock.getInputStream()));

        while (true) {
            System.out.println("SERVER-THREAD: IP "
                    + sock.getInetAddress().getHostAddress());
            out.write(marshall() + "\n");
            Thread.sleep(1000);
        }

//Client

            in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
            out = new PrintWriter(sock.getOutputStream());

            while (updateList) {
                System.out.println("Before");
                String inputip = in.readLine();
                System.out.println("CLIENT: " + inputip);
                //unmarshall(in);
                System.out.println("After");
                Thread.sleep(1000);
            }

Upvotes: 3

Views: 9888

Answers (2)

Reimeus
Reimeus

Reputation: 159864

PrintWriter buffers the data to be written so it will not do so until the buffer is full. You need to call flush here

out.flush();

Upvotes: 5

Peter Lawrey
Peter Lawrey

Reputation: 533870

When you perform a readLine() it waits until it has a read a whole line. i.e. a new line.

Your send is sending text without a newline so the receive waits for something which will not happen.

A more basic problem is that you are mixing text and binary which is more likely to confuse than be useful.

I suggest you write text with PrintWriter.println() which you can read with BufferedReader.readLine().

Upvotes: 3

Related Questions