静态服务器--多进程 (python)

#__author:   han-zhang
#date:  2019/1/5 15:49

import socket,multiprocessing,re

def request_headers(client_socket,client_addr):
    print(str(client_addr) + "连接成功")
    #接受客户端请求
    recv_data = client_socket.recv(1024).decode("utf-8")
    #以行形式切割数据
    request_headers_lines = recv_data.splitlines()
    #循环遍历打印
    for line in request_headers_lines:
        print(line)

    http_request_line = request_headers_lines[0]
    file_name = re.match(r"[^/]+(/[^ ]*)",http_request_line).group(1)
    #group()    0表示全部  1表示第一个
    print("frist file name is %s" % file_name)

    if file_name == "/":
        new_file_name = "/index.html"
        print("*"*10)
    else:
        new_file_name = file_name
        print("="*10)

    try:
        f = open(new_file_name,"rb")

    except:
        #如果未找到
        response_header = "HTTP/ 404 NOT FOUND\r\n"
        response_header += "\r\n"
        response_body ="===sorry ==="

    else:
        response_header = "HTTP/200 OK\r\n"
        response_header += "\r\n"
        response_body =f.read()

    finally:
        client_socket.sendall(response_header.encode('utf-8'))
        client_socket.sendall(response_body.encode("utf-8"))
        client_socket.close()


def main():
    server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server_socket.bind(("localhost",8000))
    server_socket.listen(5)
    print("server is readly")

    while True:
        client_socket,client_addr = server_socket.accept()
        p = multiprocessing.Process(target=request_headers,args=(client_socket,client_addr))
        p.start()
        #在创建子进程的过程中,子进程会复制一份主进程的运行环境
        #进程中的socket对象,第一个点是节省资源,第二个点是方便等待连接其他的客户端
    server_socket.close()  #不能



if __name__ == "__main__":
    main()

未经笔者允许,不得转载

猜你喜欢

转载自blog.csdn.net/weixin_42590877/article/details/88373886