页面不会停止加载python套接字+错误索引错误:列出索引超出范围



我想为多客户端套接字程序编写代码,首先我得到了Bad文件描述符,并像在这个问题中对我说的那样修复了它:套接字错误[Erno 9]错误的文件描述符HTTP服务器但现在页面不会停止加载,我得到了这个错误:

Traceback (most recent call last):
  File "C:UsersEdenDesktopHTTPserverserverV2.py", line 26, in clientthread
    FileName = rqst.split(" ")[1]
IndexError: list index out of range

我真的不知道该怎么修我认为这两个问题相互关联

import socket
import os.path
import sys
from thread import *
HOST = '0.0.0.0'
PORT = 11111
#server_socket = socket.socket()
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
   server_socket.bind((HOST, PORT))
except socket.error as msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()
server_socket.listen(1)
def clientthread(client_socket):
    try:
        while True:
            rqst = client_socket.recv(1024)
            if ("GET" not in rqst) or (rqst == ""):
                client_socket.send("HTTP/1.1 500 Internal Server Errorrn")
            FileName = rqst.split(" ")[1]
            print "Client (%s, %s) connected" % client_address
            print rqst
            if os.path.isfile(os.getcwd() + FileName) == True:
                f = open(os.getcwd() + FileName )
                g = f.read()
                response = 'HTTP/1.1 200 OKrn' + 'Content-Length: ' + str(len(g)) + 'rn''' + g  
                client_socket.send(response)
                print response
            elif FileName == "/":
                f = open(os.getcwd() + "/index.html")
                g = f.read()
                response = 'HTTP/1.1 200 OKrn' + 'Content-Length: ' + str(len(g)) + 'rn''' + g  
                client_socket.send(response)
                print response    
            elif FileName == "/for.html":
                client_socket.send("HTTP/1.1 403 Forbiddenrnrn")
                print "HTTP/1.1 403 Forbiddenrnrn"
            elif FileName == "/move.html":
                f = open(os.getcwd() + "/index2.html")
                g = f.read()
                client_socket.send(g)
                client_socket.send('HTTP/1.1 302 Moved Temporarilyrn')
                print 'moved''http/1.1 302 Moved Temporarilyrn'      
            elif "calculate-next?num=" in FileName:
                num = int(FileName[FileName.find("=")+1:])+1
                client_socket.send(str(num))
                print str(num)
            elif "calculate-area?" in FileName:
                height = float(FileName[FileName.find("height")+7:FileName.find("&")])
                width = float(FileName[FileName.find("width")+6:])
                S = float((height*width)/2)
                client_socket.send(str(S))
                print str(S)
            else:
                response = "HTTP/1.1 404 Not Foundrn"
                client_socket.send(response)
                print response   
        client_socket.close()
    except Exception:
        client_socket.close()
        import traceback
        print traceback.format_exc()
while True:
    (client_socket, client_address) = server_socket.accept()
    start_new_thread(clientthread ,(client_socket,))
server_socket.close()

rqst变量中没有空格。可能发生的情况是rqst是一个空字符串,您专门处理它,然后继续处理请求,就好像它是有效的一样。在第一个if中添加一个continue语句可以解决这个问题。

最新更新