网站/小程序/APP个性化定制开发,二开,改版等服务,加扣:8582-36016

    在本篇内容里小编给大家分享了一篇关于python静态web服务器实现方法,有需要的朋友们可以参考下。


    1、编写TCP服务器程序。

    2、获取浏览器发送的http请求消息数据。

    3、读取固定的页面数据,将页面数据组装成HTTP响应消息数据并发送给浏览器

    4、HTTP响应报文数据发送完成后,关闭服务于客户端的套接字。

    实例

    # 时间: 2021/10/21 20:38
    import socket
      
      
    if __name__ == '__main__':
        # 创建tcp服务端套接字
        tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 设置端口号复用, 程序退出端口立即释放
        tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        # 绑定端口号
        tcp_server_socket.bind(("", 8080))
        # 设置监听
        tcp_server_socket.listen(128)
        while True:
            # 等待接受客户端的连接请求
            new_socket, ip_port = tcp_server_socket.accept()
            # 代码执行到此,说明连接建立成功
            recv_client_data = new_socket.recv(4096)
            # 对二进制数据进行解码
            recv_client_content = recv_client_data.decode)
            print(recv_client_content)
             
      
            # 响应行
            response_line = "HTTP/1.1 200 OK\r\n"
            # 响应头
            response_header = "Server: py1.0\r\n"
      
            # 响应体
            response_body = "Hello,guys!"
      
            # 拼接响应报文
            response_data = (response_line + response_header + "\r\n"+ response_body).encode()
            # 发送数据
            new_socket.send(response_data)
      
            # 关闭服务与客户端的套接字
            new_socket.close()

    实例扩展:

    import socket
    import re
    import time
      def service_client(new_socket):
     """为这个客户端服务"""
      # 1.接收浏览器发送过来的请求,即http请求
     # GET / HTTP/1.1
     # --------
     request = new_socket.recv(1024).decode('utf-8')
      # 判断客户端意外断开链接返回空字符串
     if not request:
      # 关闭套接字并退出
      new_socket.close()
      print("==="*30)
      return
      # 分隔套接字
     request_lines = request.splitlines()
     print()
     print(">"*20)
     print(request_lines)
      file_name = ""
     ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])
     if ret:
      file_name = ret.group(1)
      if file_name == "/":
       file_name = "/index.html"
      # 2.返回http格式数据 给浏览器
     try:
      f = open("./html" + file_name, "rb")
     except:
      response = "HTTP/1.1 404 NOT FOUND\r\n"
      response += "Content-Type:text/html;charset=utf-8\r\n"
      response += "\r\n"
      response += "<h1>404 not found <br> 没有发现所请求资源</h1>"
      response += str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
      new_socket.send(response.encode('utf-8'))
     else:
      html_content = f.read()
      f.close()
      # 2.1准备发送给浏览器的数据---header
      response = "HTTP/1.1 200 OK\r\n"
      response += "\r\n"
      # 2.2准备发送给浏览器的数据 ---body
      # 将response header发送给浏览器
      new_socket.send(response.encode("utf-8"))
      # 将response body发送给浏览器
      new_socket.send(html_content)
      # 关闭套接字
     new_socket.close()
      def main():
     """用来完成整体的控制"""
     # 1.创建套接字
     tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     # 端口复用
     tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     # 2.绑定
     tcp_server_socket.bind(("", 7890))
     # 3.变为套接字
     tcp_server_socket.listen(128)
      while True:
      # 4.等待客户端的链接
      new_socket, client_addr = tcp_server_socket.accept()
       print(client_addr)
       # 5.为这个客户端服务
      service_client(new_socket)
      # 关闭监听套接字
     tcp_server_socket.close()
      if __name__ == '__main__':
     main()

    到此这篇关于python静态web服务器实现方法及代码详解的文章就介绍到这了


    评论 0

    暂无评论
    0
    0
    0
    立即
    投稿
    发表
    评论
    返回
    顶部