Pythonは独自のマルチタスク静的サーバーを作成します

import socket
import threading
import sys


class HttpWebServer():
    def __init__(self, port):
        # 1.编写一个TCP服务端程序
        # 创建一个socket
        self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 设置端口可重用
        self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        # 绑定地址
        self.tcp_server_socket.bind(('', port))
        # 设置监听
        self.tcp_server_socket.listen(128)

    # 获取用户请求路径
    def handle_client_request(self, client_socket):
        # 获取浏览器的请求信息
        client_request_data = client_socket.recv(1024).decode()
        print('***********************************1')
        print(client_request_data)
        print('***********************************2')

        # 获取用户请求的资源路径
        request_data = client_request_data.split(' ')
        if len(request_data) == 1:
            client_socket.close()
            return
        request_data = request_data[1]

        if request_data == '/':
            request_data = 'index.html'
        try:
            # 3.读取固定页面数据, 把页面数据组装成HTTP响应报文数据发送给浏览器
            with open('./static/' + request_data, 'rb') as f:
                file_data = f.read()
        except Exception as e:
            # 返回404
            response_line = 'HTTP/1.1 404 Not Found\r\n'
            # 应发头
            response_header = 'Server: pwd\r\n'
            # 应答体
            response_body = "404 Not Found Sorry"

            response_data = (response_line + response_header + '\r\n' + response_body).encode()

            client_socket.send(response_data)
        else:
            # 应答行
            response_line = 'HTTP/1.1 200 OK\r\n'
            # 应发头
            response_header = 'Server: pwd\r\n'
            # 应答体
            response_body = file_data

            response_data = (response_line + response_header + '\r\n').encode() + response_body

            client_socket.send(response_data)
        finally:
            client_socket.close()

    def start(self):
        while True:
            # 2.获取浏览器发送的请求报文数据
            # 建立链接
            client_socket, client_addr = self.tcp_server_socket.accept()
            # 创建子线程
            sub_thread = threading.Thread(target=self.handle_client_request, args=(client_socket,))
            sub_thread.start()


def main():
    # 获取命令行终端输入参数
    if len(sys.argv) != 2:
        print('格式错误,示例为: python XXX.py 9999')
        return

    if not sys.argv[1].isdigit():
        print('格式错误,示例为: python XXX.py 9999')
        return
        # 创建服务器对象
    port = int(sys.argv[1])
    my_web_server = HttpWebServer(port)
    # 启动服务器
    my_web_server.start()


if __name__ == '__main__':
    main()

コマンドラインとしてXXX.py実行モードを作成します。例:python XXX.py 9999 9999は、カスタマイズ用のポート番号です。

XXX.pyファイルと同じレベルに静的フォルダーがあり、そこにはいくつかの静的ページが含まれています。

アクセス方法は次のとおりです。http://127.0.0.1:9999デフォルトでindex.htmlインターフェースに戻ります

静的フォルダーはパッケージ化され、次の場所に配置されます。

リンク:https 
://pan.baidu.com/s/187w-xaueRMQdsYNPS479Xw抽出コード:yww1 

おすすめ

転載: blog.csdn.net/qq_39197555/article/details/113211496