简单的Web服务器套接字程序不起作用?

时间:2017-11-10 06:59:10

标签: python sockets webserver

我目前正在为简单的Web服务器执行套接字程序,该服务器基本上从服务器的文件系统中检索HTML文件。服务器设置完美并准备好服务,但是当我尝试访问html文件时,在这种情况下," index.html"与我的WebServer.py在同一目录中,浏览器一直说这个页面无法显示。我尝试使用不同的端口号和不同的浏览器都无济于事。

这是我的代码:

WebServer.py

from socket import *

def main():

    #Specify the port
    serverPort= 3000
    serverSocket=socket(AF_INET, SOCK_STREAM)
    serverSocket.bind(('',serverPort))
    serverSocket.listen(1) #listen for connection
    print("Web server up on port",serverPort) #print port address

    #Start thw while loop.
    while True:

        print("Ready to serve")
        connectionSocket,addr = serverSocket.accept()
        try:

            message = connectionSocket.recv(1024)
            print message,'::', message.split()[0], ':', message.split()[1]
            filename = message.split()[1]

            print(filename,'||',filename[1:])
            f = open(filename[1:])
            outputdata = f.read()
            print outputdata

            connectionSocket.send('HTTP/1.1 200 OK \r\n')
            connectionSocket.send(outputdata)
            connectionSocket.close()


        except IOError:
            pass
            #Send response message for the file not found.
            print ("404 Not Found")
            connectionSocket.send('HTTP/1.1 404 Not Found \r\n');

        #Temp break
        break
    pass
if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:1)

    connectionSocket.send('\nHTTP/1.1 200 OK\n\n')

HTTP标头开头的前导\n肯定是错误的。除此之外,行分隔符应为\r\n而不是\n

    connectionSocket.send('\HTTP/1.1 404 Not Found \n\n');

这应该是HTTP/1.1...而不是\HTTP/1.1...。行分隔符也是错误的。

我不知道你对HTTP的理解(不充分)来自哪里。但是如果你想实现一个服务器,我建议不要只看一些数据包捕获或类似但实际上研究的标准比你想象的更复杂。这就是标准的用途。