进程版
import re
import socket
import multiprocessing
def init_server():
"""初始化tcp服务器"""
#1.创建socket
#2.绑定
#3.被动
#1.创建套接字对象
tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#2.绑定端口
tcp_server.bind(("",7890))
#3.改成被动模式
tcp_server.listen(128)
#返回初始化的结果
return tcp_server
def client_exec(client):
"""处理用户的请求,根据不同的地址返回不同的网页"""
#得到地址
request_heads = client.recv(1024).decode()
#GET /index.html HTTP/1.1
head_lines = request_heads.splitlines()
first_head = head_lines[0]
file_name = re.match(r'[^/]+(/[^ ]*)', first_head).group(1)
#判断/
if file_name == "/":
file_name = "/index.html"
try:
#打开相应的文件
with open("./html%s"%file_name,"rb") as f:
content_page = f.read()
#发送
#响应格式:
# 响应头
# 空行
# 响应体
head = "HTTP/1.1 200 OK \r\n"
content = head + "\r\n"
client.send(content.encode("utf-8"))
client.send(content_page)
except Exception as e:
print(e)
head = "HTTP/1.1 404 NOT FOUND \r\n"
body = "not page is find!"
content = head + "\r\n" + body
client.send(content.encode("utf-8"))
def run_server(server):
"""开启服务处理用户请求"""
while True:
client,address = server.accept()
#处理用户请求
#一个线程一个客户端
multiprocessing.Process(target=client_exec,args=(client,)).start()
# client_exec(client)
#关闭client资源
client.close()
def main():
"""处理浏览器请求"""
#1.创建tcp服务器
#2.开启服务去循环接收用户的请求并处理
#3.关闭
#一个函数一个功能
#1.初始化tcp服务器
server = init_server()
#2.开启服务处理用户请求
run_server(server)
#3.关闭
server.close()
if __name__ == '__main__':
main()
网友评论