zoukankan      html  css  js  c++  java
  • 就业DAY7_web服务器_tcp三次握手四次挥手,返回浏览器需要的页面http服务器

    import socket
    
    
    def servece_client(new_socket):
        """为这个客户端返回数据"""
        # 1 接收浏览器发送过来的请求,即http请求
        # GET / HTTP/1.1
        # ...
        request = new_socket.recv(1024)
        print(request)
        # 2 返回http格式的数据,给浏览器
        # 2.1 准备发送给浏览器 浏览器的数据---header
        response = "HTTP/1.1 200 OK
    "
        response += "
    "
        # 2.1 准备发送给浏览器 浏览器的数---body
        response += "<h1> 呵呵 </h1>"
        new_socket.send(response.encode("utf-8"))
        # 关闭套接字
        new_socket.close()
    
    
    def main():
        """用来完成整体的控制"""
        # 1 创建套接字
        tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 设置当前服务器先close 即服务器端四次挥手之后资源能够被立即释放,这样就保证了,下次运行程序时刻重复使用
        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()
            # 5 为这个客户端服务
            servece_client(new_socket)
        # 关闭套接字
        tcp_server_socket.close()
    
    
    if __name__ == "__main__":
        main()
    import socket
    import re
    
    def servece_client(new_socket):
        """为这个客户端返回数据"""
        # 1 接收浏览器发送过来的请求,即http请求
        # GET / HTTP/1.1
        # ...
        request = new_socket.recv(1024).decode("utf-8")
        #print(">>>"*50)
        #print(request)
        request_lines = request.splitlines()
        print("")
        print(">"*20)
        print(request_lines)
        # GET /index.html HTTP/1.1
        # get put put del
        file_name = ""
        ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])
    
        if ret:
            file_name = ret.group(1)
            print("*"*50, file_name)
            if file_name == "/":
                file_name = "/index.html"
    
        # 2 返回http格式的数据,给浏览器
    
    
        #response += "<h1> 呵呵 </h1>"
        try:
            f = open("./html" + file_name, "rb")
        except:
            response = "HTTP/1.1 404 NOT FOUND
    "
            response += "
    "
            response += "file not found"
            new_socket.send(response.encode("utf-8"))
            new_socket.send(response)
        else:
            html_content = f.read()
            f.close()
            # 2.1 准备发送给浏览器 浏览器的数据---header
            response = "HTTP/1.1 200 OK
    "
            response += "
    "
            # 2.1 准备发送给浏览器 浏览器的数---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)
        # 设置当前服务器先close 即服务器端四次挥手之后资源能够被立即释放,这样就保证了,下次运行程序时刻重复使用
        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()
            # 5 为这个客户端服务
            servece_client(new_socket)
        # 关闭套接字
        tcp_server_socket.close()
    
    
    if __name__ == "__main__":
        main()
  • 相关阅读:
    修改电脑安装路径
    快读模板
    ECNU XCPC 2021 OCTOBER TRAINING #1
    System.AccessViolationException处理,HandleProcessCorruptedStateExceptions
    网页打包到apk
    去除服务器的heder信息
    outlook
    华为机试题:计算链路长度
    华为机试题:求子区间面积和
    华为机试题: IPv6地址压缩
  • 原文地址:https://www.cnblogs.com/joycezhou/p/11544863.html
Copyright © 2011-2022 走看看