美文网首页python的基础以及提高
Python day22_mini_tcp服务器多任务版

Python day22_mini_tcp服务器多任务版

作者: g_s_007 | 来源:发表于2018-05-30 22:43 被阅读0次

进程版

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()

相关文章

网友评论

    本文标题:Python day22_mini_tcp服务器多任务版

    本文链接:https://www.haomeiwen.com/subject/gsffsftx.html