美文网首页
python开发简单web服务器

python开发简单web服务器

作者: 闫子亮 | 来源:发表于2020-04-25 11:37 被阅读0次
###协程版
import gevent
import socket
import time
from gevent import monkey
monkey.patch_all()

class ServerTcpSocket(object):
    #初始化方法定义socket
    def __init__(self):
        self.server_tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        #绑定端口
        self.server_tcp_socket.bind(("", 8080))
        #开启端口复用
        self.server_tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        #开启监听
        self.server_tcp_socket.listen(128)

    #创建程序start方法
    def startsystem(self):
        #循环创建new_socket
        while True:
            new_socket, port_ip = self.server_tcp_socket.accept()

            #创建协程
            ms = gevent.spawn(self.sendrecv, new_socket)

            ms.join()


    #创建sendrecv方法
    def sendrecv(self, new_socket):
        #接收用户的数据
        clent_data = new_socket.recv(1024).decode("utf-8")

        #防止浏览器退出
        if len(clent_data) == 0:
            print("浏览器退出")
            new_socket.close()
            return

        #生成数据list
        user_list = clent_data.split(" ", maxsplit=2)
        #拿到用户请求的资源地址
        user_tcp_path = user_list[1]
        #防止用户不输地址报错
        print(user_tcp_path)
        if user_tcp_path == "/":
            user_tcp_path = "yan.html"
        try:
            with open("./"+user_tcp_path, "rb") as file:
                file_data = file.read()
        except Exception as e:
            with open("404.html", "rb") as file:
                file_data = file.read()


            new_socket.send(("HTTP/1.1 404 not find\r\n" + "Server: nbweb\r\n"+"\r\n").encode("utf-8") + file_data)
        else:
            new_socket.send(("HTTP/1.1 200 OK\r\n"+"Server: nbweb\r\n"+"\r\n").encode("utf-8")+file_data)

        time.sleep(0)






#定义主方法
def main():
    server1 = ServerTcpSocket()
    server1.startsystem()


if __name__ == '__main__':
    main()

相关文章

网友评论

      本文标题:python开发简单web服务器

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