import re
import socket
import multiprocessing
def rec_request(tcp_socket):
# 循环接收客户端消息
# 每来一个客户,就创建一个线程处理客户端请求
while True:
sever_client, ip_port = tcp_socket.accept()
# 创建进程
client_process = multiprocessing.Process(target=handle_request,args=(sever_client,))
# 启动进程
client_process.start()
sever_client.close()
def server_init():
# 1.创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 及时释放端口号
tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定端口号
tcp_socket.bind(('', 3344))
# 设置监听
tcp_socket.listen(128)
return tcp_socket
def handle_request(sever_client):
# 接收客户端消息
rec_content = sever_client.recv(1024).decode('gbk')
# print(rec_content)
# if rec_content:
# 将客户端的消息分行显示,获取请求报文的第一行
head_line = rec_content.splitlines()[0]
# 用正则匹配出用户请求文件
file_name = re.match(r'[^/]+(/[^ ]*)', head_line).group(1)
# 判断是否是/
if file_name == '/':
file_name = 'E:/python高级全部课件/index.html'
else:
file_name = file_name
# 捕获异常
try:
# 打开客户请求的文件
with open(file_name, 'rb') as f:
# 读取文件
request_page = f.read()
# 返回数据
# 1.响应头
header = 'HTTP/1.1 200 ok\r\n'
# 2.空行
header += '\r\n'
# 3.响应体
body = request_page
# 发送数据给客户端
sever_client.send(header.encode('gbk'))
sever_client.send(body)
except Exception as e:
print(e)
# 返回数据
# 1.响应头
header = 'HTTP/1.1 404 NOT FOUND\r\n'
# 2.空行
header += '\r\n'
# 3.响应体
body = '页面丢失了'
response = header + body
sever_client.send(response.encode('gbk'))
def main():
# 1.创建套接字
# 2.接收客户请求
# 3.处理客户请求
# 4.返回数据
# 1.创建套接字
tcp_socket = server_init()
# 2.接收客户请求
rec_request(tcp_socket)
# 3.关闭服务器套接字
tcp_socket.close()
if __name__ == '__main__':
main()
静态服务器-多进程版
猜你喜欢
转载自blog.csdn.net/longting_/article/details/80808266
今日推荐
周排行