zoukankan      html  css  js  c++  java
  • socket模拟简单的服务器

    code:

    from multiprocessing import Process
    import re
    import socket
    
    HTML_ROOT_DIR = "./html"
    
    class HTTPServer(object):
        """服务器"""
        def __init__(self):
            self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    
        def start(self):
            """开启服务器"""
            self.server_socket.listen(128)
            while True:
                client_socket, client_addr = self.server_socket.accept()
                print("[%s, %s]用户连接上了..." % client_addr)
                handle_client_process = Process(target=self.handle_client, args=(client_socket,))
                handle_client_process.start()
                client_socket.close()
    
        def handle_client(self, client_socket):
            """处理客户端请求"""
            request_data = client_socket.recv(1024)
            print("request_data: ", request_data)
            request_lines = request_data.splitlines()
            for line in request_lines:
                print(line)
    
            request_start_line = request_lines[0]
            file_name = re.match(r"w+ +(/[^ ]*) ", request_start_line.decode("utf-8")).group(1)
            print("file_name ==" ,file_name)
            if "/" == file_name:
                file_name = "/index.html"
                print("HTML_ROOT_DIR + file_name = ",HTML_ROOT_DIR + file_name)
    
            try:
                file = open(HTML_ROOT_DIR + file_name, "rb")
            except IOError:
                # 设置响应头
                response_start_line = "HTTP/1.1 404 Not Fount
    "
                response_head_line = "server: My server
    "
                response_body = "The File is not Found!"
            else:
                file_data = file.read()
                file.close()
                
                # 设置响应头
                response_start_line = "HTTP/1.1 200 OK
    "
                response_head_line = "Server: My server
    "
                response_body = file_data.decode("utf-8")
            finally:
                response = response_start_line + response_head_line + "
    " + response_body
                print("response data: ", response)
    
                client_socket.send(bytes(response, "utf-8"))
                client_socket.close()
    
        def bind(self, port):
            self.server_socket.bind(("127.0.0.1", port))
    
    
    def main():
        http_server = HTTPServer()
        http_server.bind(9000)
        http_server.start()
    
    if __name__ == "__main__":
        main()    
         
  • 相关阅读:
    手机也需“绿色环保”,省电类APP或将成为“标配”?
    Netty入门实例及分析
    ios开发经常使用RGB色值
    poj Kaka's Matrix Travels
    C++ 继承体系中的名称覆盖
    spring-framework-3.2.4与hibernate-release-4.3.5下使用HibernateDaoSupport抛出异常
    Codeforces Round #131 Div1 B
    URAL 1837. Isenbaev's Number (map + Dijkstra || BFS)
    数据库升级代码学习
    delphi:临界区对象TCriticalSection(Delphi) 与 TRtlCriticalSection 的区别
  • 原文地址:https://www.cnblogs.com/nzd123456/p/9855027.html
Copyright © 2011-2022 走看看