请求和发送的数据都是有header 和 body 的,但是我们之前看的请求的数据似乎只有header,那是因为以GET 开头的一般没有body 。但是如果以其他开头,一般就有:
之前我们实现的服务器是为一个用户服务,再为另一个用户服务,那么我们之前学过多任务(进程 线程 协程),这里用多任务来实现服务器:
进程:多进程,主进程和子进程之间资源不是共享的,子进程复制一份主进程,所以 主程序中,要把主进程close ,然后等待子进程执行完 close。程序才会结束。
import socket
import re
import multiprocessing
def service_client(new_client_sock):
'''为这个客户服务'''
# 1.接受浏览器发送过来的请求,即http请求,并且从请求中找到所需要的.html文件
# GET / HTTP/1.1
# ...
requst = new_client_sock.recv(1024).decode('utf-8')
# 转为列表
requst_lines = requst.splitlines()
# 寻找文件名 GET /index.html HTTP/1.1
# 开头有:GET POST PUT DEL 不一定是GET 所以应该不能用GET匹配。
ret = re.match(r'[^/]+(/[^ ]*)',requst_lines[0])
if ret:
file_name = ret.group(1)
if file_name == '/ ':
file_name = '/index.html'
# 2.3 准备body,且这里准备的body不能和之前的字符串一样,直接相加,而是要单独发送。
# 找到相对应的.html文件
try: