Ni .NET ni el protocolo TCP tienen algo incorporado para definir el tamaño del mensaje que se adelantará. El protocolo TCP solo especifica que todos los datos se transferirán al punto final receptor (o al menos que se empleará el mejor esfuerzo para hacerlo).
Usted es el único responsable de definir una forma de que el receptor sepa la cantidad de datos que debe leer. Los detalles de cómo lo hace son, como han señalado otros, dependientes de la naturaleza de lo que está transfiriendo: podría enviar la longitud primero como usted mencionó, podría codificar secuencias especiales llamadas terminadores, podría usar fragmentos de datos predefinidos entonces todos los mensajes tienen el mismo tamaño, etc.
EDITAR
Esto comenzó como un comentario, pero hay más a él que se ajusta a ese límite.
Para complemento NULL a la corriente significa simplemente añadiendo un carácter que tiene el valor binario 0 (que no debe confundirse con el carácter 0
). Dependiendo de la codificación que está utilizando para su transferencia (es decir, ASCII, UTF-8, UTF-16, etc.) que puede traducirse en el envío de uno o más bytes 0, pero si está utilizando la traducción adecuada, simplemente debe poner algo como \0
en tu cadena. He aquí un ejemplo:
string textToSend = "This is a NULL Terminated text\0";
byte[] bufferToSend = Encoding.UTF8Encoding.GetBytes(textToSend);
Por supuesto, todo lo anterior supone que todo el resto de los datos que va a enviar no contiene otros valores NULL. Eso significa que es texto, y no datos binarios arbitrarios (como el contenido de un archivo). ¡Eso es muy importante! De lo contrario, no puede usar NULL como terminador de mensajes y debe crear otro esquema.
Bien, ¿podría alguien decirme cómo agregar NULL al final de la transmisión? – Jack