TCP - это поток, поэтому то, что вы описываете, совершенно нормально, когда вы отправляете несколько пакетов с одной стороны соединения, другая сторона может получать все одновременно.
Хорошо, ядро Windows находится вФакт борьбы с вами в этом, так как он пытается как можно больше для объединения пакетов.Если вы хотите отключить это (он называется алгоритмом Nagle) со стороны, отправляющей данные:
TcpClient client = // something
client.NoDelay = true;
Но TCP всегда будет представлять поток, поэтому вы должны быть готовы к этому.
В вашем случае это означает, что вы должны проанализировать возвращенную строку, найти все '\0'
и отправить событие для каждого из них.