import re
import socket
from multiprocessing import Process
进程处理函数,专门处理客户端的请求
def handle_client(client_skt):
# 接收客户端数据
recv_data = client_skt.recv(1024)
# 按照换行进行切割
request_lines = recv_data.splitlines()
if request_lines:
# 提取请求行
request_method_line = request_lines[0].decode('utf-8')
# 提取文件名
file_name = re.match('[^/]+(/[^ ]*)', request_method_line).group(1)
else:
# 空白请求
file_name = '/'
if file_name == '/':
file_name = document_root + '/index.html'
else:
file_name = document_root + file_name
# print(file_name)
try:
fp = open(file_name)
except IOError:
response_lines = 'HTTP/1.1 404 page not found\r\n'
response_body = '@_@,sorry file not found'
else:
response_lines = 'HTTP/1.1 200 ok\r\n'
response_body = fp.read()
fp.close()
finally:
response = response_lines + '\r\n' + response_body
client_skt.send(response.encode('utf-8'))
client_skt.close()
网站静态资源目录
document_root = ‘./html’
if name == ‘main’:
# 创建TCP套接字
server_skt = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
# 绑定主机和端口
server_skt.bind((’’, 8880))
# 监听服务
server_skt.listen(20)
while True:
# 阻塞,等待客户端连接
client_skt, client_addr = server_skt.accept()
# 创建一个新的进程处理请求
client_process = Process(target=handle_client, args=(client_skt,))
# 启动进程
client_process.start()
# 关闭连接
client_skt.close()