静态服务器-多进程版

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