简单实现web服务器

import multiprocessing
import socket
import re


class WebService(object):
    def __init__(self):
        # 创建套接字
        self.socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        # 重复利用一个端口不会报错
        self.socket_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

        # 绑定ip,端口
        self.socket_server.bind(("", 9900))  # 如果ip为本地,则可以不写

        # 开始监听
        self.socket_server.listen(128)

    def service_client(self, new_socket):
        # 接收客户端发送的数据
        requestHeader = new_socket.recv(1024).decode("utf-8")
        file_list = requestHeader.splitlines()
        filename = ""
        ret = re.match(r"[^/]+(/[^ ]*)", file_list[0])
        if ret:
            filename = ret.group(1)
            print(filename)
            if filename == "/":
                print("*" * 100)
                filename = "/index.html"

        # 返回http数据给客户端
        try:
            f = open("./html" + filename, "rb")
        except:
            # 有异常时执行
            # responseHeader
            responseHeader = "HTTP/1.1 404 NOT FOUND\r\n"
            responseHeader += "\r\n"
            responseHeader += "FILE NOT FOUND 哈哈哈"
            new_socket.send(responseHeader.encode("utf-8"))
        else:
            # 没有异常执行
            responseBody = f.read()
            f.close()
            # responseHeader
            responseHeader = "HTTP/1.1 200 OK\r\n"
            responseHeader += "\r\n"
            # 发送responseHeader给客户端
            new_socket.send(responseHeader.encode("utf-8"))
            # 发送responseBody给客户端
            new_socket.send(responseBody)
        # 关闭套接字
        new_socket.close()

    def run(self):
        """用来控制整体"""

        while True:
            # 等待客户端链接
            new_socket, address = self.socket_server.accept()

            # 为客户端服务
            p = multiprocessing.Process(target=self.service_client, args=(new_socket,))
            p.start()
            new_socket.close()

        # 关闭套接字
        self.socket_server.close()


def main():
        web_service = WebService()
        web_service.run()


if __name__ == "__main__":
    main()

 

Guess you like

Origin blog.csdn.net/weixin_44079370/article/details/109558027