Python socket attendre
Je me demandais si il ya une manière que je peux dire à python d'attendre jusqu'à ce qu'il obtient une réponse d'un serveur pour continuer à fonctionner.
Je suis en train d'écrire un jeu basé par tour. - Je faire le premier pas et il envoie le déplacer vers le serveur, puis le serveur à l'autre ordinateur. Le problème vient ici. Comme il n'est plus, à mon tour, je veux que mon jeu à attendre jusqu'à ce qu'il obtient une réponse du serveur (attendre jusqu'à ce que l'autre joueur fait un mouvement). Mais ma ligne:
data=moi.la chaussette.recv(1024)
se bloque parce que (je pense) c'est pas de faire quelque chose immédiatement. Donc, je veux savoir comment puis-je le faire attendre que quelque chose se produise et ensuite continuer.
Merci d'avance.
Eh bien, il gèle, et il n'y a pas de trace. Je force la fermeture de la fenêtre, et puis il dit: "le Processus est terminé avec le code de sortie -805306369" @A.
OriginalL'auteur mapl93 | 2014-01-30
Vous devez vous connecter pour publier un commentaire.
Cette ligne,
sock.recv(1024)
, blocs jusqu'à 1024 octets ont été reçus ou le système d'exploitation détecte une erreur de socket. Vous avez besoin de savoir la taille du message -- c'est pourquoi les messages HTTP inclure la Longueur du Contenu.Vous pouvez définir un délai d'attente avec socket.settimeout pour annuler la lecture entièrement si le nombre d'octets n'arrivera pas avant un délai d'attente.
Vous pouvez aussi explorer Python les sockets non bloquant à l'aide de setblocking(0).
.recv
peut revenir à moins de1024
octets.OriginalL'auteur A. Jesse Jiryu Davis
La programmation socket howto est pertinente à cette question, plus particulièrement, la présente partie:
Les principaux plats à emporter à partir de ce sont:
vous aurez besoin d'établir un FIXE de taille de message, OU vous aurez besoin d'envoyer la taille du message en début de message
lors de l'appel de socket.recv, passer le nombre d'octets que vous voulez vraiment (et je devine que vous n'avez pas vraiment envie de 1024 octets). Ensuite, l'utilisation de Boucles parce que vous n'êtes pas assuré d'obtenir tout ce que vous voulez en un seul appel.
OriginalL'auteur jdhildeb