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)