IIC2333 / foro-2019-1

Foro oficial del curso IIC2333 - Sistemas Operativos y Redes, semestre 2019-1.
2 stars 0 forks source link

Payload inicial de scores #137

Closed jmopaso closed 5 years ago

jmopaso commented 5 years ago

Hola!

Tengo el siguiente problema, para implementar el payload de los scores (dos bytes) lo estaba definiendo de esta forma:

payload[2];
payload[0] = 1;
payload[1] = 1;

Lo que me indica que al cliente que le envío el paquete tiene 1 punto y el contrincante también. (En este caso el paquete se envía perfecto)

El problema aparece cuando empieza el juego y envío los scores iniciales a los clientes, donde los puntajes de los dos deberían ser cero, entonces los definía de la siguiente forma:

payload[2];
payload[0] = 0;
payload[1] = 0;

Lo que pasa en este caso es que al mandar el paquete en el payload no me aparece nada y el payload size me indica que es 0 (cuando debería ser dos). Creo que lo anterior pasa porque 0 en ASCII es interpretado como null por lo que escribir mi código de arriba sería lo mismo que sólo poner payload[2];.

Entonces quisiera preguntar si existe una forma de enviar el 0 por el paquete de la misma forma que mando cualquier otro número para despues ser casteado como tal en el lado del cliente.

nivek0o0 commented 5 years ago

Hola, no debería existir ningún problema al enviar uno o varios 0's a través del socket. Tal vez el error está en la forma en que estás construyendo y enviando el paquete o la forma en que lo recibes e interpretas.

¿Nos dieron acceso a su repositorio para que lo revise?

jmopaso commented 5 years ago

Si! Ya tienen acceso al repo, mis cambios estan en la branch scores

jmopaso commented 5 years ago

Hola denuevo.

Después de haber indagado un poco más descubro que mi problema está en la función mostrada en la ayudantía calculate_length

int calculate_length(char * input){
  int i = 0;
  while (1){
    if (input[i] == '\0'){
      return i;
    }
    i++;
  }
}

Donde cuando le paso:

input[2];
input[0] = 1;
input[1] = 1; 

Siendo input un arreglo de chars, no tengo ningún problema, ya que lógicamente la función me retorna 2, pero cuando tengo:

input[2];
input[0] = 0;
input[1] = 0;

La función me retorna 0, lo cual es un problema para mi, ya que esa función me indica el size payload que tendrá mi paquete de envío, que debería ser 2 en vez de 0.

Espero que se pueda haber entendido mejor mi problema.

nivek0o0 commented 5 years ago

Hola! Esa función era un ejemplo para calcular el largo de un string con caracteres no nulos. Si deseas ocuparla para otros fines te sugiero modificarla para darle un comportamiento específico según, por ejemplo, el MessageID.

O bien que el largo del payload dependa del ID cuando se trata de esos paquetes que envías ceros, y ocupar la función problemática para el caso de strings.

Saludos!