Ошибка индекса вне списка в веб-сервере python - PullRequest
0 голосов
/ 25 февраля 2020

Я использую localhost с номером порта 6789 для тестирования моего веб-сервера. Это работает, когда я отправляю первый запрос, чтобы найти файл, который существует или файл, который не существует. Когда я пытаюсь отправить второй запрос сразу после этого, я получаю IndexError: список индекса выходит за пределы диапазона:

f = open (имя файла [1:])

Мое соединение постоянно, но я Я не уверен, если я должен отправить один запрос за один раз.

Мой код

import socket
import sys # In order to terminate the program

serverPort = 6789
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#Prepare a sever socket
serverSocket.bind(('',serverPort))
serverSocket.listen(1)

while True:
   #Establish the connection
   print('Ready to serve...')
   connectionSocket, addr = serverSocket.accept()
   try:
      message = connectionSocket.recv(1024)
      filename = message.split()[1]
      f = open(filename[1:])
      outputdata = f.read() 
      #Send one HTTP header line into socket
      connectionSocket.send(bytes('HTTP/1.1 200 OK\r\n\r\n',"UTF-8"))
      #Send the content of the requested file to the client
      for i in range(0, len(outputdata)):
         connectionSocket.send(outputdata[i].encode())
      connectionSocket.send("\r\n".encode())
      connectionSocket.close()
   except IOError:
      print("404 not found")
      connectionSocket.send(bytes('HTTP/1.1 404 NOT FOUND\r\n\r\n',"UTF-8"))
      connectionSocket.close()


serverSocket.close()
sys.exit()

1 Ответ

0 голосов
/ 01 марта 2020

Я смог понять это. Мне нужно было проверить, было ли сообщение пустым или нет.

 message = connectionSocket.recv(1024)
 m = message.split()
 if m:
          print(m[1])
          filename = message.split()[1]
          f = open(filename[1:])
          outputdata = f.read() 
          f.close()
          connectionSocket.send(bytes('HTTP/1.1 200 OK\r\n\r\n','UTF-8'))
          for i in range(0, len(outputdata)):
              connectionSocket.send(outputdata[i].encode())
          connectionSocket.send("\r\n".encode())
          connectionSocket.close()
      else: 
          #handling None values
          print("file not found")
          connectionSocket.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...