Alecks
Alecks

Reputation: 11

Messages lost while using java sockets readUTF

I have been dealing with one problem all day and I googled it in many different ways but I just can not find a solution, so I guest is time to ask:

I'm trying to code two apps: the client and the server with java using sockets and everything except one thing works fine: the client won't receive all the messages but only pair ones.

What I am doing is looping a 2D array to send every "x" time a message from the server to the client but for example if the loop send 8 messages the client only receive messages 2, 4, 6 and 8.

I printed in my server side console the output just as a verification that the array is property filled and the server display all the messages but not the client.

Im using this:

    DataOutputStream out = new DataOutputStream(outToServer);
        out.writeUTF(getMACAddress());
        InputStream inFromServer = client.getInputStream();
        DataInputStream in = new DataInputStream(inFromServer);
        while (true)
        {
            String input = in.readUTF();
            if (input.equals("finish"))
            {
                System.out.println("Server has closed the connection\nGoodBye!");
                System.exit(0);
            }
            else
            {
                System.out.println("Server says " + in.readUTF());
            }
        }

Upvotes: 0

Views: 504

Answers (1)

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726489

The problem is that you read input for comparison to "finish", and then you read a whole new string that you never compare.

Instead, you should print input in the else branch of the conditional, i.e.

while (true) {
    String input = in.readUTF();
    if (input.equals("finish")) {
        System.out.println("Server has closed the connection\nGoodBye!");
        System.exit(0);
    } else {
        System.out.println("Server says " + input);
        //                                  ^^^^^
    }
}

Upvotes: 1

Related Questions