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