Hello!

Do you wait for the response from the server before you send him another package from the client?

TCP Connections must be used like byte oriented streams and not packed oriented streams, because the IP packages can be fragmented from one host to another or are put together on the receivers side, if the receiver is too busy to handle each packet.

That's the reason, why you get multiple messages in "one read".

If client/server receives a message you have to do something like this
Code:
while DataAvailable do
  ReadOneMessage
For the "ReadOneMessage" part you have to introduce some sort of internal packaging, like adding a special character at the of each messages (CR?) or start with a message len.

Why do you want to dismiss the first 4 characters? Are they looking ugly? Then it may be the length (in Bytes) of the received message. Read the first 4 bytes as an 32bit Integer and then exactly the amount of characters for the message-data.

For further help, simply post your code
HTH