Web静态服务器-显示需要的页面

来源:互联网 发布:中国人口年龄结构数据 编辑:程序博客网 时间:2024/05/22 03:05

Web静态服务器-显示需要的页面

  • 在同一个工程里面,新建一个目录html,同时新建一个index.html文件
#coding=utf-8import socketimport refrom multiprocessing import Process#常量,所有字母全部大写#设置静态文件根目录HTML_ROOT_DIR="./html"def handle_client(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)    #解析请求报文    #'GET / HTTP/1.1'    request_start_line=request_lines[0]    #提取用户请求的文件名    print(request_start_line.decode("utf-8"))    file_name=re.match(r"\w+ +(/[^ ]*) ",request_start_line.decode("utf-8")).group(1)    #常量写在左边,变量写在右边    if "/" == file_name:        file_name="/index.html"    #打开文件,读取内容    try:        file=open(HTML_ROOT_DIR+file_name,"rb")    except IOError:        # 构造响应数据        response_start_line = "HTTP/1.1 404 NOT FOUND\r\n"        response_headers = "Server:My server\r\n"        response_body = "The file is not found"    else:        file_data=file.read()        file.close()        # 构造响应数据        response_start_line = "HTTP/1.1 200 OK\r\n"        response_headers = "Server:My server\r\n"        response_body = file_data.decode("utf-8")    finally:        #形成响应报文        response=response_start_line+response_headers+"\r\n"+response_body        print("response data:",response)    #注意编码问题    #向客户端返回响应数据    client_socket.send(bytes(response,"utf-8"))    #关闭客户端socket连接    client_socket.close()if __name__=="__main__":    #tcp socket 服务端    #AF_INET---常量,某个具体数值    server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)    server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)    server_socket.bind(("",8000))    server_socket.listen(128)    while True:        #返回一个新的客户端的套接字        client_socket, client_address = server_socket.accept()        # print("[%s,%s]用户连接上了!"%(client_address[0],client_address[1]))        print("[%s,%s]用户连接上了!" % client_address)        #新建进程        handle_client_process=Process(target=handle_client,args=(client_socket,))        handle_client_process.start()        #client套接字关闭        client_socket.close()