hallo allemaal
ik probeer momenteel een chat programma te maken in python. cruciaal onderdeel is natuurlijk dat de server een bericht dat het ontvangt van een client. daar heb ik de volgende code voor.
bij het connecten met de server (na succesvolle authenticatie)
users is dus een lijstje met verbonden users
vervolgens komt er een bericht binnen en moet die naar alle users verstuurd worden, dit stukje probeert dat:
het probleem is alleen dat de client die het originele bericht verstuurt heeft vervolgens accuut dropt en dan een oneindige rij aan lege lijnen print als ontvangen bericht.
het gekke is dat als op de server dit for loopje weg haal dit niet voorkomt maar ik heb met debuggen vastgesteld (dmv breakpoints) dat de loop wel gewoon de juiste user selecteer. maar die user ontvangt niks.
ik vermoed dat ik dus niet direct die socket in die thread kan aanroepen maar het terugzenden van de verificatie (op dit moment alleen nog een "OK"
) werkt wel gewoon. kan iemand mij hier mee helpen?
ik probeer momenteel een chat programma te maken in python. cruciaal onderdeel is natuurlijk dat de server een bericht dat het ontvangt van een client. daar heb ik de volgende code voor.
bij het connecten met de server (na succesvolle authenticatie)
Python:
1
2
| user = [NAME, self.server.socket] #NAME is de naam van de client die deze thread afhandelt users.append(user) |
users is dus een lijstje met verbonden users
vervolgens komt er een bericht binnen en moet die naar alle users verstuurd worden, dit stukje probeert dat:
Python:
1
2
3
4
| for u in users: if u[0] != NAME: socket = u[1] socket.request.sendall(bytes(self.data, "utf-8")) |
het probleem is alleen dat de client die het originele bericht verstuurt heeft vervolgens accuut dropt en dan een oneindige rij aan lege lijnen print als ontvangen bericht.
het gekke is dat als op de server dit for loopje weg haal dit niet voorkomt maar ik heb met debuggen vastgesteld (dmv breakpoints) dat de loop wel gewoon de juiste user selecteer. maar die user ontvangt niks.
ik vermoed dat ik dus niet direct die socket in die thread kan aanroepen maar het terugzenden van de verificatie (op dit moment alleen nog een "OK"