极简 demo tcp服务器面向函数编程 python

import re
import socket


def init_tcp_server():
    """创建一个服务器"""
    # 服务器tcp服务器对象
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 设置我们的端口地址重用
    tcp_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    # 绑定端口号
    tcp_server.bind(("", 7890))
    # 改成被动模式
    tcp_server.listen(True)

    return tcp_server


def client_exec(client):
    """客户端处理"""
    # 接收数据
    # 处理请求头,获取我们请求的地址
    # 根据不同的地址返回不同的网页
    # 结束

    # 接收数据
    data = client.recv(1024).decode()
    # 处理请求头,获取我们请求的地址
    # 请求格式 GET /地址 HTTP/1.1,我只要第一行
    try:
        request_head = data.splitlines()[0]
        # 正则去获取地址
        re_ret = re.match(r'[^/]+(/[^ ]*)', request_head)
        # 判断结果
        if re_ret:  # 匹配到了
            # 要一个地址
            file_name = re_ret.group(1)
            # 只有一个/
            if file_name == "/":
                file_name = "/index.html"  # 首页
    except Exception as e:
        print(e)  # 记录日志中(文件)
    # 做的好一点
    # 有可能后期做很多处理
    try:
        # 根据不同的地址返回不同的网页
        # 打开文件(html)
        with open("./html%s" % file_name, 'rb') as f:  # 打开文件有可能是有图片跟文字的
            content_html = f.read()

        # 把特定的格式发过去
        # 响应头
        # 空行
        # 响应体

        heads = "HTTP/1.1 200 OK\r\n"
        heads += "\r\n"

        client.send(heads.encode("utf-8"))  # 发头
        client.send(content_html)  # 发体
    except Exception as e:
        # 没有这个文件
        heads = "HTTP/1.1 404 NOT FOUND\r\n"
        heads += "Content-Type:text/html;charset=utf-8\r\n"
        heads += "\r\n"
        body = "亲,您的网页已走迭!"

        content = heads + body

        client.send(content.encode("utf-8"))

    # 结束
    client.close()


def run_server(server):
    """运行服务器"""
    while True:
        # 接收客户端
        client, addr = server.accept()
        # 处理客户端请求
        client_exec(client)


def main():
    # 创建一个服务器为浏览器工作  ctrl+B
    # 1.需要一个服务器
    server = init_tcp_server()
    # 2.运行这个服务器
    run_server(server)


if __name__ == '__main__':
    main()



阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页