TCP é um protocolo de transmissão orientado por fluxo; Ele só se preocupa em obter bytes na ordem correta de um host para outro, não se importa com o conteúdo desses bytes ou qualquer mensagem que eles possam formar. Uma vez que uma conexão é estabelecida, o final da conexão pode enviar bytes para o outro.
Para dar significado a uma mensagem, você precisa concordar com um protocolo em cima do TCP. É esse protocolo que determina quais mensagens devem ser enviadas e como interpretar mensagens recebidas; isso inclui determinar quando uma mensagem é concluída. Por exemplo, em HTTP, se o cabeçalho “Content-Length” estiver presente, o receptor pode usá-lo para descobrir se recebeu todos os dados; se não for, outros métodos são usados (veja o RFC para detalhes), até simplesmente esperando que o servidor feche a conexão (que, de alguma forma, está usando o TCP para determinar o tamanho da mensagem, embora de maneira bastante cara).
Se você quiser enviar mensagens individuais usando um protocolo de transporte orientado a mensagens, use UDP ou SCTP em vez de TCP.