IIC2233 / Syllabus-2021-2

Repositorio oficial del curso IIC2233 Programación Avanzada 🚀✨
https://iic2233.github.io/
38 stars 48 forks source link

Problema enviar datos entre cliente y servidor #358

Open Crisax234 opened 2 years ago

Crisax234 commented 2 years ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Hola tengo una duda con mi código cuando quiero enviar datos al servidor una vez que el cliente ya se conecto, utilizo threads para escuchar lo que llegue al servidor por parte de un socket y viceversa, la primera vez que envió algo al servidor este me responde sin problemas, sin embargo cuando quiero enviar algo al servidor nuevamente de la misma forma (específicamente cuando un jugador reta a otro), el servidor no recibe nada y tampoco me da ningun error, como si ya no fuera capaz de recibir mensajes por el cliente, como podría solucionarlo?

De antemano muchas gracias

eliseolopez20 commented 2 years ago

Hola @Crisax234 Si tu servidor solo puede recibir un mensaje y después no recibe, probablemente esta fallando en la forma de que el thread reciba mensajes constantemente, dado que si no usas eso correctamente la función de recibir solo corre una vez y finaliza. Recomiendo revisar los ejemplos de la semana-12 para ver como usualmente se soluciona ese problema. Quedo atento si no se soluciona el problema

Crisax234 commented 2 years ago

Si lo pude solucionar y el servidor me escucha el mensaje, sin embargo me aparece este error:

Exception in thread Thread-2: Traceback (most recent call last):
File "C:\Users\crist\AppData\Local\Programs\Python\Python38\lib\threading.py", line 932, in _bootstrap_inner
self.run() File "C:\Users\crist\AppData\Local\Programs\Python\Python38\lib\threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "c:\Users\crist\Crisax234-iic2233-2021-2\Tareas\T3\servidor\servidor.py", line 84, in listen_client_thread
dict_recibido = json.loads(dict_comando.decode('utf-8')) File "C:\Users\crist\AppData\Local\Programs\Python\Python38\lib\json__init__.py", line 357, in loads return _default_decoder.decode(s)
File "C:\Users\crist\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 340, in decode raise JSONDecodeError("Extra data", s, end) json.decoder.JSONDecodeError: Extra data: line 1 column 33 (char 32)

lo busque pero no entiendo muy bien qué significa en mi código, que puede estar provocándolo?

eliseolopez20 commented 2 years ago

No logre encontrar el error, porque creo que no tienes tu repo personal actualizado. Sin embargo, encontre un par de respuestas en google que podrían ayudarte a encontrar el error, que podría ser por como esta definido tu archivo JSON link1 y link2

Crisax234 commented 2 years ago

Perdon ahora lo acabo de actualizar, la cosa es que no es al cargar el archivo json, sin que cuando le hago un json.loads a un comando que envio

eliseolopez20 commented 2 years ago

Revisando tu código, creo que el error esta en el tipo de dato de dict_comando de la función listen_thread en cliente.py. Te recomiendo usar print(type()) para ver que tipo de datos estas usando y si es el que quieres usar para poder manejar el mensaje que deseas enviar. Recomiendo revisar los contenidos de la semana-11 que muestran como trabajar con los distintos tipos de datos. Espero haberte ayudado

Crisax234 commented 2 years ago

Ya entendí por que no funciona pero no logro decifrar por que el diccionario que quiero mandar se repite tantas veces cuando lo paso a bytes siendo que hago eso solo una vez :/

Crisax234 commented 2 years ago

Ya lo pude resolver muchas gracias por tu tiempo!

eliseolopez20 commented 2 years ago

Que bueno, mucho ánimo con lo que queda de semestre!