面向对象tcp服务器端

import socket
import re


def main():
    """主函数"""
    # 封装 一个函数一个功能  创建服务器  提取客户端 处理单独的客户端
    # tcp_socket = make_server()
    # accept_client(tcp_socket)
    tcp_socket = WebServer()
    tcp_socket.accept_client()


class WebServer(object):

    def __init__(self):
        """创建服务器   初始化服务器属性"""
        self.tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.tcp_socket.bind(('', 1372))
        self.tcp_socket.listen(128)
        # return tcp_socket

    def accept_client(self):
        """不断提取客户端"""
        while True:
            client, addres = self.tcp_socket.accept()
            self.client_exec(client)

        # 关闭服务器
        self.tcp_socket.close()

    def client_exec(self, client):
        """单独处理客户端"""
        re_data = client.recv(1024).decode()
        re_lines = re_data.splitlines()
        print(re_lines[0])
        try:
            re_match = re.match(r'[^/]+(/[^ ]*)', re_lines[0])
            if re_match:
                file_name = re_match.group(1)
                if file_name == '/':
                    file_name = '/index.html'
        except Exception as e:
            print(e)
        try:
            head = 'HTTP/1.1 200 OK\r\n'
            with open('./html{}'.format(file_name), 'rb') as file:
                body = file.read()
            content = head + '\r\n'
            client.send(content.encode())
            client.send(body)
        except Exception as e:
            print(e)
            head = 'HTTP/1.1 404 NOT FOUND\r\n'
            body = 'sorry not find'
            content = head + '\r\n' + body
            client.send(content.encode())
        # 关闭客户端服务器
        client.close()


if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/weixin_42020284/article/details/80019229