我无法让我的基本和简单的TCP服务器正确处理http请求。这就是我到目前为止所拥有的
from socket import *
import sys
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('', 4567))
serverSocket.listen(1)
while True:
print('Ready to serve...')
connectionSocket, addr = serverSocket.accept()
print("connected from: ", addr)
try:
message = connectionSocket.recv(1024)
filename = message.split()[1]
f = open(filename[1:])
outputdata = f.read()
connectionSocket.send("HTTP/1.1 200 OK\r\n")
for i in range(0, len(outputdata)):
connectionSocket.send(outputdata[i].encode())
connectionSocket.send("\r\n".encode())
connectionSocket.close()
except IOError:
connectionSocket.send("file not found")
serverSocket.close()
sys.exit()
错误来自open语句。我不完全理解这行代码的返回值是如何组织的。
message = connectionSocket.recv(1024)
我知道返回值以字节为单位但是当我尝试使用函数将其转换为像decode()这样的字符串时,我也会遇到错误
我的.py文件和html文件位于我本地计算机上的同一目录中,我测试的方式是运行它并打开浏览器并输入
http://127.0.0.1:4567/helloworld.html
我的代码在收到HTTP请求后会立即崩溃。 任何和所有的帮助将不胜感激!
答案 0 :(得分:0)
您的代码存在许多问题,因为您没有说明您关注的具体问题,所以我看到的是:
{{1}}
这似乎会在您发送回客户端的每个字符后发送换行符。
此外,它不会处理客户端断开连接,因为您要发回无效数据。
即使您尝试做的事情中没有这些错误,您似乎也没有尝试发回有效的http响应。