2016-02-11 3 views
0

У меня возникли трудности с получением данных с сервера на python. Я получаю дескриптор файловой системы Errno 9 и сообщение «соединение было сброшено» в моем браузере всякий раз, когда я пытаюсь получить доступ к моему тестовому html-файлу. Код выглядит следующим образом:errno 9 дескриптор файлового файла, базовый сокет сервера python

#import socket module 
from socket import * 
serverSocket = socket(AF_INET, SOCK_STREAM) 
serverPort = 12000 
#Prepare a sever socket 
serverSocket.bind(("", serverPort)) 
serverSocket.listen(1) 


while True: 
    #Establish the connection 
    print 'Ready to serve...' 
    connectionSocket, addr = serverSocket.accept()#Accepts a TCP client connection, waiting until connection arrives 
    print 'Required connection', addr 
    try: 

     message = connectionSocket.recv(64) 
     filename = message.split()[1] 
     f = open(filename[1:]) 
     outputdata = f.read() 

     #Send one HTTP header line into socket 
     connectionSocket.send('HTTP/1.0 200 OK\r\n\r\n') 


     #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: 
     #Send response message for file not found 
     connectionSocket.send('404 Not Found!') 
     #Close client socket 
     connectionSocket.close() 
     serverSocket.close() 

Я не могу сказать, почему я получаю эту ошибку. Я попытался удалить закрытие справа от выходных данных для цикла, и это тоже не сработало. Я попытался изменить порт сервера и закрыть сокет и сервер в разных заказах.

полный Trackback является:

Traceback (most recent call last): 
    File "UDPServer.py", line 13, in <module> 
    connectionSocket, addr = serverSocket.accept()#Accepts a TCP client connection, waiting until connection arrives 
    File "C:\Anaconda\lib\socket.py", line 202, in accept 
    sock, addr = self._sock.accept() 
    File "C:\Anaconda\lib\socket.py", line 170, in _dummy 
    raise error(EBADF, 'Bad file descriptor') 
socket.error: [Errno 9] Bad file descriptor 

ответ

1

Вы не можете использовать сокет когда она закрыта. The docs для socket.close() say:

Все будущие операции над объектом сокета не удастся.

Вы можете создать новый сокет в цикле.

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