TCP is stream-based, which means you send bytes without them necessarily being in a \"message\", so the receiver may get half a message or one and two thirds of messages.
If you are looking transport layer protocol, then check SCTP.
SCTP is message-oriented like UDP and ensures reliable, in-sequence transport of messages with congestion control like TCP.
SCTP is not yet widely used. So I suggest to use TCP with some kind of message framing.