问题描述
我是一名初级/中级程序员,目前正在尝试用 Python 3 编写一个简单的 Web 服务器.但是,每当我运行该模块时,我都会收到 OSError: [Errno 9] Bad file descriptor.我已经在互联网上搜索了答案,但我似乎无法自己解决这个问题.这是代码和回溯:
I'm a beginning/intermediate level programmer currently trying to write a simple web server in Python 3. However, whenever I run the module I get OSError: [Errno 9] Bad file descriptor. I've scoured the internet looking for answers, but I can't seem to figure this one out on my own. Here is the code and traceback:
#import socket module
from socket import *
serverSocket=socket(AF_INET,SOCK_STREAM)
#Prepare a server socket
serverSocket.bind(('IP address', 8000))
serverSocket.listen(1)
while True:
#Establish the connection
print('Ready to serve...')
(connectionSocket, addr) = serverSocket.accept()
print ('connected from',addr)
try:
message=connectionSocket.recv(1024)
filename=message.split()[1]
print (filename)
filename=message.split()[1]
f=open(filename[1:])
outputdata=f.read()
#Send one HTTP header line into socket
connectionSocket.send('HTTP/1.1 200 OK')
#Send the content of the requested file to the client
for i in range(0, len(outputdata)):
connectionSocket.send(outputdata[i])
connectionSocket.close()
except IOError as err:
print ('IO error')
#Send response message for file not found
connectionSocket.send(b'file not found')
#Close client socket
connectionSocket.close()
serverSocket.close()
追溯:
Traceback (most recent call last):
File "/Users/BigRed/Desktop/SOS/webServer.py", line 17, in <module>
(connectionSocket, addr) = serverSocket.accept()
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/socket.py", line 184, in accept
fd, addr = self._accept()
OSError: [Errno 9] Bad file descriptor
推荐答案
当出现 OIError 时,您正在调用 serverSocket.close()
.但是当你重新进入 while 循环时,你调用 serverSocket.accept()
而没有调用 serverSocket=socket(AF_INET,SOCK_STREAM)
,这失败了,因为你已经调用了 close()
When there is a OIError, you're calling serverSocket.close()
. But when you re-enter in the while loop, you call serverSocket.accept()
without call serverSocket=socket(AF_INET,SOCK_STREAM)
, and this fails, because you've called the close()
请参阅此帖子
希望有所帮助
PD: Django 开发人员不经常使用套接字.=)
PD: django developers don't use socket regularly. =)
这篇关于OSError: [Errno 9] python 3 中的文件描述符错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!