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.
So in something like a game where each message is fixed-size, if I receive a portion of a message I could just keep it in a buffer until I receive the other part. This is a bit tedious, but is there any other message-based reliable protocol? There probably are, but none are implemented in the OS as with TCP and UDP, so I'll have to use some library, which is fine as long as it's easy to use.
I could always make a somewhat-reliable UDP protocol. Which do you suggest?