3.3 简单web服务器的实现

穿精又带淫゛_ 提交于 2019-12-03 01:32:31

3.3 简单web服务器的实现


3.3.1 返回固定页面的HTTP服务器

import socket
import time

def service_client(new_socket):
"""为客户端返回数据"""
# 1.接收浏览器发过来的请求
request = new_socket.recv(1024)
print(request)
# 2.返回http格式的数据给浏览器
response = "HTTP/1.1 200 OK \r\n"
response += "\r\n"
response += "<H1>hello python,hello world!</H1>"
new_socket.send(response.encode("utf-8"))
new_socket.close()
return True

def main():
"""用来完成整体的控制"""
# 1.创建套接字
tcp_sever = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.绑定端口
tcp_sever.bind(("", 7890))
# 3.变为监听套接字
tcp_sever.listen(128)
a = False
while True:
# 4.等待客户端的链接
new_socket, new_socket_addr = tcp_sever.accept()
# 5.为客户端服务
a = service_client(new_socket)
if a:
break
tcp_sever.close()

if __name__ == "__main__":
main()

运行的结果如下:

3.3.2 TCP 3次握手、4次挥手


3.3.2 返回浏览器需要的页面

import socket

def service_client(new_socket):
    """为客户端返回数据"""
    # 1.接收浏览器发过来的请求
    request = new_socket.recv(1024)
    print(request)
    # 2.返回http格式的数据给浏览器
    response = "HTTP/1.1 200 OK \r\n"
    response += "\r\n"
    # response += "<H1>hello python,hello world!</H1>"
    # 3.准备浏览器数据index.html
    f = open("./html/index.html", "rb")
    html_data = f.read()
    f.close()
    # 4.发送HTTP协议
    new_socket.send(response.encode("utf-8"))
    # 5.发送浏览器数据
    new_socket.send(html_data)
    new_socket.close()
    return True

def main():
    """用来完成整体的控制"""
    # 1.创建套接字
    tcp_sever = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_sever.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    # 2.绑定端口
    tcp_sever.bind(("", 7891))
    # 3.变为监听套接字
    tcp_sever.listen(128)
    a = False
    while True:
        # 4.等待客户端的链接
        new_socket, new_socket_addr = tcp_sever.accept()
        # 5.为客户端服务
        a = service_client(new_socket)
        if a:
            break
    tcp_sever.close()

if __name__ == "__main__":
    main()

返回固定页面的重要知识点

3.准备浏览器数据index.html

    f = open("./html/index.html", "rb")
    html_data = f.read()
    f.close()
    # 4.发送HTTP协议
    new_socket.send(response.encode("utf-8"))
    # 5.发送浏览器数据
    new_socket.send(html_data)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!