简单pythonweb服务器故障
我正在尝试使用套接字库编写python web服务器。我已经浏览了好几个源代码,不明白为什么我写的代码不起作用。其他人运行了非常类似的代码,并声称它是有效的。我是python新手,所以可能缺少一些简单的东西 现在唯一可行的方法是将数据变量发送回客户机。浏览器打印原始GET请求。当我尝试发送HTTP响应时,连接超时简单pythonweb服务器故障,python,sockets,webserver,Python,Sockets,Webserver,我正在尝试使用套接字库编写python web服务器。我已经浏览了好几个源代码,不明白为什么我写的代码不起作用。其他人运行了非常类似的代码,并声称它是有效的。我是python新手,所以可能缺少一些简单的东西 现在唯一可行的方法是将数据变量发送回客户机。浏览器打印原始GET请求。当我尝试发送HTTP响应时,连接超时 import socket ##Creates several variables, including the host name, the port to use ##the s
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()
导入套接字
##创建多个变量,包括主机名、要使用的端口
##传输的大小,以及一次可以处理多少请求
主机=“”
端口=8080
积压=5
大小=1024
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s、 绑定((主机、端口))
s、 倾听(待办事项)
而1:
客户端,地址=s.accept()
数据=client.recv(16)
如果数据:
client.send('HTTP/1.0 200正常\r\n')
client.send(“内容类型:text/html\r\n\r\n”)
client.send('Hello World')
client.close()
s、 关闭()
您需要在响应之前使用输入,并且不应关闭while循环中的套接字:
client.recv(16)
替换为client.recv(size)
,以使用请求s.close()
向后移动一个缩进,使其不在while循环中。此时,您正在关闭连接,然后再次尝试从中接受,因此您的服务器将在第一次请求后崩溃
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
祝你好运 当您尝试运行它时会发生什么情况[顺便说一句,除了学习套接字和/或HTTP之外,您所做的是个坏主意]当我运行它时,shell会弹出并等待,直到我在浏览器中键入localhost:8080。当我这样做时,外壳关闭。过了一会儿,浏览器显示连接超时。如前所述,如果我只向客户端发送数据变量,web浏览器将显示GET请求。感谢您的回复,Graham。我已经实现了这些更改(我最初使用client.recv(size)并更改了它,因为我正在进行故障排除)。然而,这两个变化没有什么区别。它适用于我在Linux上使用Chrome浏览器。尝试
size=4096
以确保您正在消费所有东西。查看Chrome或Firefox的网络检查器,看看是否有任何线索。这很奇怪。我在Windows7上使用IE和FF。我试着加大尺寸。我注意到唯一不同的是,当我在浏览器中键入localhost:8080时,shell现在没有关闭。Live HTTP标头中没有显示任何内容。我卸载了当前版本(3.2.3)并安装了2.7,它正常工作。谢谢你的帮助,格雷厄姆。