2009-09-21 8 views
1

Je veux sortir de la boucle quand il n'y a pas de données, mais la boucle semble arrêter à recvfromne pouvait pas sortir de la boucle python

image='' 
while 1: 
     data,address=self.socket.recvfrom(512) 
     if data is None:break 
     image=image+data 
     count=count+1 
     print str(count)+' packets received...' 
+0

Que voulez-vous dire par l'arrêt? Est-ce que le programme plante ou bloque-t-il? – Uri

+0

Avez-vous réglé le socket en mode non-bloquant? –

Répondre

0

Quel est le mode de blocage de votre prise? Si vous êtes en mode bloquant (ce qui est la valeur par défaut), votre programme s'arrêtera jusqu'à ce que les données soient disponibles ... Vous ne pourrez donc pas passer à la ligne suivante après le recv() jusqu'à ce que les données arrivent.

Si vous passez en mode non-bloquant, cependant (voir socket.setblocking (flag)), je pense qu'il déclenchera une exception que vous auriez à attraper plutôt que null-check.

0

Vous pouvez définir socket.setdefaulttimeout (n) pour sortir de la boucle si aucune donnée n'est renvoyée après la période spécifiée.

2

recvfrom peut en effet s'arrêter (en attente de données) sauf si vous avez défini votre socket en mode non bloquant ou en attente. De plus, si le socket est fermé par votre homologue, l'indication "socket was closed, nothing more to receive" est pas une valeur de None pour data - c'est une chaîne vide, ''. Donc, vous pouvez changer votre test à if not data: break pour plus de généralité.

Questions connexes