Pourquoi ai-je une erreur de descripteur de fichier incorrecte?

J’ai eu une erreur pour le mauvais descripteur de fichier pour ce code pour le programme du serveur udp que j’ai fait

from socket import * s = socket(AF_INET, SOCK_DGRAM) s.bind(('', 890)) while True: (c,a) = s.recvfrom(1024) msg = 'thanks for requesting' s.sendto(msg,a) s.close() 

Le message d’erreur que j’ai eu était

 Traceback (most recent call last): File "udpserv.py", line 7, in  (c,a) = s.recvfrom(1024) File "/usr/lib/python2.7/socket.py", line 174, in _dummy raise error(EBADF, 'Bad file descriptor') socket.error: [Errno 9] Bad file descriptor 

quelqu’un peut-il s’il vous plaît me dire comment j’ai eu cette erreur et comment le résoudre?

Vous obtenez cette erreur car vous close le socket, puis vous appelez à nouveau recvfrom .

Si vous ajoutez une print après la ligne avec recvfrom , vous remarquerez que le premier appel à recvfrom fonctionne comme prévu. Le deuxième appel (après une boucle) lance l’erreur que vous voyez.

Corrigez votre code en supprimant simplement s.close() . (Vous n’avez pas besoin de fermer la connexion au client car UDP n’a pas ce concept, contrairement à TCP si vous aviez cela à l’esprit.)

Vous pouvez obtenir la même erreur si vous avez une boucle while infinie. Dans mon cas, j’ai remplacé le

 while True: 

avec

 count = 0 while (count < 10): count += 1 #rest of the code