我为我制作的 udp 服务器程序的这段代码收到错误的文件描述符错误
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()
我得到的错误信息是
Traceback (most recent call last):
File "udpserv.py", line 7, in <module>
(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
谁能告诉我这个错误是怎么产生的以及如何解决的?
您收到此错误是因为您关闭
套接字然后再次调用recvfrom
。
如果您在 recvfrom
行之后添加 print
,您会注意到对 recvfrom
的第一次调用按预期工作。第二次调用(在循环一次后)抛出您看到的错误。
只需删除 s.close()
即可修复您的代码。 (您不需要关闭与客户端的连接,因为 UDP 没有这个概念,与 TCP 相比,如果您有这个概念的话。)
我是一名优秀的程序员,十分优秀!