Python web服务器-拆分文件名时的索引器错误

Python web服务器-拆分文件名时的索引器错误,python,web-services,sockets,python-2.7,split,Python,Web Services,Sockets,Python 2.7,Split,我已经成功地从浏览器访问了我的web服务器,在服务器上下载了一个文件,并用chrome正确地查看了它。但是,当服务器待机约20秒时,它将与索引器一起崩溃 from socket import * serverport = 972 serverSocket = socket(AF_INET, SOCK_STREAM) serverSocket.bind(('', serverport)) serverSocket.listen(1) print 'Standing by...' while Tr

我已经成功地从浏览器访问了我的web服务器,在服务器上下载了一个文件,并用chrome正确地查看了它。但是,当服务器待机约20秒时,它将与索引器一起崩溃

from socket import *
serverport = 972
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('', serverport))
serverSocket.listen(1)
print 'Standing by...'

while True:
    #Establish the connection
    connectionSocket, addr = serverSocket.accept()

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

        for i in range(0, len(outputdata)):
            connectionSocket.send(outputdata[i])
        print 'Success! File sent!'
        connectionSocket.close()

    except IOError:
        errormessage = 'Error 404 - File not found'
        connectionSocket.send(errormessage)
我得到的输出如下:

Standing by..
Success! File sent! #sent everytime i request the webpage on the client localhost:80/helloworld.html
Traceback (most recent call last):
  File "C:/Users/Nikolai/Dropbox/NTNU/KTN/WebServer/TCPServer.py", line 14, in <module>
    filename = message.split()[1]
IndexError: list index out of range
待命。。
成功!文件已发送#每次我请求客户端localhost上的网页时发送:80/helloworld.html
回溯(最近一次呼叫最后一次):
文件“C:/Users/Nikolai/Dropbox/NTNU/KTN/WebServer/TCPServer.py”,第14行,在
filename=message.split()[1]
索引器:列表索引超出范围

这可能是客户端正在关闭连接。连接完成后,将收到一个空字符串
'

'.split()[1]
将失败,索引超出范围。我的建议是尝试使用此修补程序:

message = connectionSocket.recv(1024)
if not message:
    # do something like return o continue
另外,您应该从套接字中
recv
,直到获得空字符串。在代码中,如果请求大于1024,会发生什么情况?可以这样做:

try:
    message = ''
    rec = connectionSocket.recv(1024)
    while rec:
        rec = connectionSocket.recv(1024)
        message += rec
    if not message:
        connectionSocket.close()            
        continue
    filename = message.split()[1]
    f = open(filename[1:])
    outputdata = f.read()

    for i in range(0, len(outputdata)):
        connectionSocket.send(outputdata[i])
    print 'Success! File sent!'
    connectionSocket.close()
您应该阅读,特别是创建多线程服务器的部分,这可能就是您想要做的:)


希望这有帮助

请尝试将
message=connectionSocket.recv(1024)[2:]
添加到错误行之前的
logging.debug(message)
语句输出了什么?我不知道为什么有人投了反对票。他在SO提出的第一个问题说得很好。在很大程度上,当我打印出连接时,客户端发送了一条空消息。我认为这与客户端配置不同。。非常感谢您指出这一点。@NikolaiHegelstad我添加了到文档相关部分的链接。非常推荐阅读。我将尝试实现这一点,我必须阅读更多关于http请求的buffersize的内容。