• WEB框架原理(socket)


    socket服务端 

    socket示例
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1', 8000))
    sk.listen()
    
    while 1:
        conn, addr = sk.accept()
        ret = conn.recv(10240)
        print(ret)
        conn.send(b"HTTP/1.1 200 OK
    
    ooooojiba98k")
    不同路劲返回不同的内容
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1', 8000))
    sk.listen()
    
    while 1:
        conn, addr = sk.accept()
        ret = conn.recv(10240)
        ret_str = str(ret, encoding='utf-8')
        res = ret_str.split('
    ')[0].split(' ')[1]
        print(res)
        if res == '/aaa/':
            msg = b'123'
        elif res == '/bbb/':
            msg = b'456'
        else:
            msg = b'789'
        conn.send(b'HTTP/1.1 200 OK
    
    ')
        conn.send(msg)
        conn.close()
    不同路劲返回不同内容(函数版)
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1', 8000))
    sk.listen()
    
    
    def aaa(res):
        data = 'What you visited was:{}'.format(res)
        return bytes(data, encoding='utf-8')
    
    
    def bbb(res):
        data = 'What you visited was:{}'.format(res)
        return bytes(data, encoding='utf-8')
    
    
    while 1:
        conn,addr = sk.accept()
        ret = conn.recv(10240)
        ret_str = str(ret, encoding='utf-8')
        res = ret_str.split('
    ')[0].split(' ')[1]
        print(res)
        if res == '/aaa/':
            msg = aaa(res)
        elif res == '/bbb/':
            msg = bbb(res)
        else:
            msg = b'Not found'
        conn.send(b'HTTP/1.1 200 OK
    
    ')
        conn.send(msg)
        conn.close()
    不同路径返回不同内容(反射版)
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1', 8000))
    sk.listen()
    
    
    def aaa(res):
        data = 'what you visited was:{}'.format(res)
        return bytes(data, encoding='utf-8')
    
    
    def bbb(res):
        data = 'what you visited was:{}'.format(res)
        return bytes(data, encoding='utf-8')
    
    
    res_list = [
        ('/aaa/', aaa),
        ('/bbb/', bbb)
    ]
    while 1:
        # ------连接部分------
        conn,addr = sk.accept()
        ret = conn.recv(10240)
        # 收到的字节转化成字符串
        ret_str = str(ret, encoding='utf-8')
        # 对请求行进行切割
        res = ret_str.split('
    ')[0].split(' ')[1]
        # -------业务处理部分--------
        # 使用func变量保存将要执行的函数
        for i in res_list:
            if i[0] == res:
                func = i[1]
                break
        else:
            func = None
        # 执行函数
        if func:
            msg = func(res)
        else:
            msg = b'404Not found'
        # ----回复响应消息----
        conn.send(b'HTTP/1.1 200 OK
    
    ')
        conn.send(msg)
        conn.close()
    返回网页
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1', 8000))
    sk.listen()
    
    
    def aaa(res):
        data = 'what you visited was:{}'.format(res)
        return bytes(data, encoding='utf-8')
    
    
    def bbb(res):
        data = 'what you visited was:{}'.format(res)
        return bytes(data, encoding='utf-8')
    
    
    def login(res):
        with open('login.html', 'rb')as f:
            data = f.read()
        return data
    
    
    res_list = [
        ('/aaa/', aaa),
        ('/bbb/', bbb),
        ('/login/', login),
    ]
    while 1:
        # ------连接部分------
        conn,addr = sk.accept()
        ret = conn.recv(10240)
        # 收到的字节转化成字符串
        ret_str = str(ret, encoding='utf-8')
        # 对请求行进行切割
        res = ret_str.split('
    ')[0].split(' ')[1]
        # -------业务处理部分--------
        # 使用func变量保存将要执行的函数
        for i in res_list:
            if i[0] == res:
                func = i[1]
                break
        else:
            func = None
        # 执行函数
        if func:
            msg = func(res)
        else:
            msg = b'404Not found'
        # ----回复响应消息----
        conn.send(b'HTTP/1.1 200 OK
    
    ')
        conn.send(msg)
        conn.close()
    返回动态网页
    import socket
    import time
    sk = socket.socket()
    sk.bind(('127.0.0.1', 8800))
    sk.listen()
    
    
    def aaa(res):
        data = 'what you visited was:{}'.format(res)
        return bytes(data, encoding='utf-8')
    
    
    def bbb(res):
        data = 'what you visited was:{}'.format(res)
        return bytes(data, encoding='utf-8')
    
    
    def login(res):
        with open('login.html', 'r', encoding='utf-8')as f:
            data = f.read()
        now = str(time.time())
        data = data.replace('@@**@@', now)
        return bytes(data, encoding='utf-8')
    
    
    res_list = [
        ('/aaa/', aaa),
        ('/bbb/', bbb),
        ('/login/', login),
    ]
    while 1:
        # ------连接部分------
        conn, addr = sk.accept()
        ret = conn.recv(10240)
        # 收到的字节转化成字符串
        ret_str = str(ret, encoding='utf-8')
        # 对请求行进行切割
        res = ret_str.split('
    ')[0].split(' ')[1]
        # -------业务处理部分--------
        # 使用func变量保存将要执行的函数
        for i in res_list:
            if i[0] == res:
                func = i[1]
                break
        else:
            func = None
        # 执行函数
        if func:
            msg = func(res)
        else:
            msg = b'404Not found'
        # ----回复响应消息----
        conn.send(b'HTTP/1.1 200 OK
    
    ')
        conn.send(msg)
        conn.close()
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="x-ua-compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Title</title>
    </head>
    <body>
    <h1>This is login page!</h1>
    <p>时间:@@**@@</p>
    </body>
    </html>
    HTML文件
  • 相关阅读:
    ASP创建对象及中文显示解决方法
    webservice解读
    top监控工具
    Crontab实例
    javascript闭包的理解
    98万买下51.com域名,51.com不止2000万美金
    百度08年网页搜索份额73.2% 创历史新高
    讲故事投资 天使投资人的中国式生存
    下个谷歌将诞生于中国或印度
    Twitter入选10大搜索引擎
  • 原文地址:https://www.cnblogs.com/chenyibai/p/9761853.html
Copyright © 2020-2023  润新知