Closed Lord-Kelsier closed 3 years ago
Hola @Lord-Kelsier!
Según la información que proporcionaste, creo que debe ser que no estás leyendo correctamente el mensaje según su largo. Cuando un socket recibe información, crea internamente una "cola" de lo que le falta por leer, y desde esa cola va sacando la información por trocitos del tamaño que le hayas indicado. Esto genera un problema que buscaré aclarar con el siguiente flujo:
Es por esto que es importante que se rellene con bytes 0 cuando el bloque no llega al largo especificado, como se indica en el diagrama del enunciado:
Prerrequisitos
(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")
Duda
Hola, busco ayuda para resolver un problema, la busco aqui pues es un problema que no ocurre siempre, es aleatorio, si ocurriera cada vez que hiciera algo podria encontrar el origen, pero no puedo forzar que ocurra de ninguna forma. El problema es que cuando se envian datos desde el servidor hasta el cliente a veces llegan mal, pero no es que llegue mal ordenado el indice del paquete, sino que llegan corridos, es decir, mi programa lee los primeros 4 luego los siguientes 64, mirando que el primero sea el indice del paquete y aveces los 4 bytes del indice corresponden a parte del mensaje (en resumen llegan corrido).
Esto me llevaria a pensar que hice algo mal, pero la mayoria de veces el programa funciona, se envian bien los datos, entonces el codigo deberia estar bien no? pues sino no funcionaria nunca. Aun asi tengo un sospechoso:
Como duda extra: En los apuntes mencionaron que era recomendable que en el
rcv()
se pusiera una potencia pequña de 2, ¿esto aplica tambien para elsendall()
? (es decir que se envien bytes cuyo largo es una potencia de 2)