2013-10-27 5 views
1

Я программист начального/промежуточного уровня, который в настоящее время пытается написать простой веб-сервер в Python 3. Однако всякий раз, когда я запускаю модуль, я получаю OSError: [Errno 9 ] Плохой дескриптор файла. Я искал интернет, ища ответы, но я, похоже, не могу понять это самостоятельно. Вот код и отслеживающий:OSError: [Errno 9] Плохой дескриптор файла в python 3

#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:

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 
+1

Почему есть тег «django»? – lalo

+0

У вас была ошибка IOError? – lalo

+0

Да, вероятно, не нужен тег django, он был рекомендован по любой причине. Возможно, пользователь django может знать. В любом случае там была ошибка ввода-вывода при выполнении кода: Готов к подаче ... , связанный с ('10 .0.0.6 ', 50077) b'/helloworld.html ' Ошибка ввода-вывода Готов к отправке ... – tracer223

ответ

2

Когда есть OIError, вы звоните serverSocket.close(). , Но когда вы вновь войти в то время цикла вы звоните serverSocket.accept() без вызова serverSocket=socket(AF_INET,SOCK_STREAM), и это не удается, потому что вы назвали close()

Смотреть эту post

надеюсь, помочь

PD: Разработчики django не используют сокет регулярно. =)

+0

Да спасибо! После дальнейшего вмешательства сервер работает сейчас – tracer223

Смежные вопросы