2015-02-14 3 views
1

Я работаю над своим первым программным кодом для сокета Python, и я не могу понять, что не так. Я набираю IP-адрес сервера, на котором работает эта программа, вместе с номером порта и файлом, который я пытаюсь получить. Я должен получить файл в браузере и сокет должен закрыть. Вместо этого сервер печатает строку печати «Готов к обслуживанию ...» три раза, отображает «404 Not Found» в браузере и никогда не закрывает сокет. У кого-нибудь есть идеи?Python Socket Programming Простой веб-сервер

#import socket module 
from socket import * 
serverSocket = socket(AF_INET, SOCK_STREAM) 
#Prepare a sever socket 
serverSocket.bind(('', 12006)) 
serverSocket.listen(1) 
while True: 
    print 'Ready to serve...' 
    #Establish the connection 
    connectionSocket, addr = serverSocket.accept() 
    try: 
     message = connectionSocket.recv(1024) 
     filename = message.split()[1] 
     f = open(filename[1:]) 
     outputdata = f.read() 
     f.close() 
     #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() 
+0

Как вы знаете, он никогда не закрывает розетку? – rlms

+0

Попробуйте напечатать объект исключения IOError, который может дать больше информации. Вы могли бы открыть IOError из файла. Python 2 или 3? – cdarke

+0

Я пробовал его в python 2.7.5 и Windows Vista, и он работает. – rafalopez79

ответ

2

Спасибо всем за помощь. Я понял, что случилось. Я переименовал свой HTML в «HelloWorld.html», а затем Windows автоматически добавила .html к концу файла. Поэтому, чтобы получить доступ к файлу, мне нужно было ввести HelloWorld.html.html. Я изменил имя файла, и тогда этот код работал отлично.