简单的Python Web服务器麻烦

时间:2012-04-11 18:24:47

标签: python sockets webserver

我正在尝试使用套接字库编写python Web服务器。我经历了几个来源,无法弄清楚为什么我写的代码不起作用。其他人运行非常相似的代码并声称它有效。我是python的新手,所以我可能会遗漏一些简单的东西。

现在唯一可行的方法是将数据变量发送回客户端。浏览器打印原始GET请求。当我尝试发送HTTP响应时,连接超时。

import socket

##Creates several variables, including the host name, the port to use
##the size of a transmission, and how many requests can be handled at once
host = ''
port = 8080
backlog = 5
size = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)
while 1:
    client, address = s.accept()
    data = client.recv(16)
    if data:
        client.send('HTTP/1.0 200 OK\r\n')
        client.send("Content-Type: text/html\r\n\r\n")
        client.send('<html><body><h1>Hello World</body></html>')

    client.close()
    s.close()

1 个答案:

答案 0 :(得分:2)

您需要在响应之前使用输入,并且不应该在while循环中关闭套接字:

  1. client.recv(16)替换为client.recv(size),以使用该请求。

  2. 将最后一行s.close()移回一个缩进,使其不在您的while循环中。您正在关闭连接,然后再次尝试accept,这样您的服务器将在第一次请求后崩溃。

  3. 除非您将此作为练习,否则您应该扩展SimpleHTTPServer而不是直接使用套接字。

    此外,在创建套接字(在绑定之前)之后添加此行会修复您可能遇到的任何“已在使用的地址”错误。

    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    
    祝你好运!