import socket
import re
def client_handler(client_socket):
"""客户端处理函数"""
# 接收到客户端的请求头
recv_data = client_socket.recv(4096)
# 把bytes的请求头解码为str
recv_str_data = recv_data.decode()
# 使用字符串的切割函数,切割\r\n,拿到请求头 列表
data_set = recv_str_data.split("\r\n")
# 使用下标获取请求行
request_line = data_set[0]
# 使用正则表达式匹配请求行,使用匿名分组的()方便取 路径 的值
result = re.match(r"\w+\s+(\S+)", request_line)
# 假如result匹配的是空,则执行以下代码,返回错误信息,关闭socket,退出函数
if not result:
print("HTTP请求报文格式错误")
client_socket.close()
return
# 通过匿名分组号1取得 路径
path_info = result.group(1)
print("接收到用户的资源请求 %s" % path_info)
# 判断路径是否未写,未写是默认/,是的话替换为/index.html,否则执行try时会报错
if path_info == '/':
path_info = '/index.html'
# 通过给的路径,在static文件夹中以二进制方式读取文件,假如文件不存在会抛出异常,执行except
try:
# 没有抛出异常则继续往下执行代码
file
import re
def client_handler(client_socket):
"""客户端处理函数"""
# 接收到客户端的请求头
recv_data = client_socket.recv(4096)
# 把bytes的请求头解码为str
recv_str_data = recv_data.decode()
# 使用字符串的切割函数,切割\r\n,拿到请求头 列表
data_set = recv_str_data.split("\r\n")
# 使用下标获取请求行
request_line = data_set[0]
# 使用正则表达式匹配请求行,使用匿名分组的()方便取 路径 的值
result = re.match(r"\w+\s+(\S+)", request_line)
# 假如result匹配的是空,则执行以下代码,返回错误信息,关闭socket,退出函数
if not result:
print("HTTP请求报文格式错误")
client_socket.close()
return
# 通过匿名分组号1取得 路径
path_info = result.group(1)
print("接收到用户的资源请求 %s" % path_info)
# 判断路径是否未写,未写是默认/,是的话替换为/index.html,否则执行try时会报错
if path_info == '/':
path_info = '/index.html'
# 通过给的路径,在static文件夹中以二进制方式读取文件,假如文件不存在会抛出异常,执行except
try:
# 没有抛出异常则继续往下执行代码
file