He experimentado un poco con los mensajes de socket TCP asíncrono entre dos programas, para pasar datos, números y/o texto. Lo que he hecho es usar una palabra clave al comienzo de cada mensaje, y luego separar los valores con el "|" personaje. Por lo que un mensaje puede tener este aspecto:Cómo separar los mensajes de socket TCP
"DATOS | 490 | 40517,9328222222 | 1 | 6 | 11345 | 11347 | 11344 | 11345 | 106 | 40517,8494212963"
fijo el tamaño de búfer de lectura en 1024, ya que la mayoría de los mensajes estará dentro de esa longitud. Sin embargo, a veces puedo enviar rápidamente muchos mensajes cortos donde varios juntos tienen menos de 1024 caracteres, y parece que se leerá de una vez. Y si envío un mensaje de más de 1024 caracteres, se dividirá. Así que estoy buscando algunos consejos sobre cómo manejar esto. ¿Debo usar algunos caracteres especiales para iniciar y/o finalizar cada mensaje? Agradecería algunos consejos sobre cómo hacer esto ...
Gracias! ¿A qué te refieres con serializar? ¿Se aplica a las PC estándar operadas por Windows? Con su último comentario, ¿significa que debería cambiar el tamaño del búfer según el mensaje que se recibe? Cómo funcionará esto ... Dado que la longitud del mensaje no se conoce hasta que el mensaje ya se haya leído, no entiendo exactamente a qué se refiere. Por cierto; ¿Tiene sentido dividir un mensaje en el lado del remitente, o esto no tendrá ningún impacto en el rendimiento? El tamaño será un mensaje de 50 caracteres cada 200 ms, y raramente un mensaje de 50,000-400,000 caracteres. – bretddog
Serializar solo significa "dar salida como una cadena". La sugerencia de @terminus sería una forma razonable de hacerlo: convierta la longitud del mensaje en una cadena de longitud fija para que se convierta fácilmente en una 'int sin firmar 'en el lado de recepción. Puede solicitar leer muchos bytes primero en un búfer de tamaño fijo, y luego asignar un búfer para recibir el resto del mensaje. No se moleste en dividir el mensaje en el lado de envío: la pila TCP/IP realizará cualquier paquetización requerida. –
¡salud! Creo que lo entendí ahora :) – bretddog