什么是HTTP协议
- 中文名: 超文本传输协议
- 服务器与浏览器通信的一种规则
- 浏览器发送什么数据服务器能懂
- 服务器发送什么浏览器能懂(自行解析, 渲染页面)
import socket
def service_client(new_socket):
"""为这个客户端返回数据"""
# 1.接收浏览器的请求
# GET / HTTP/1.1
# ....
request = new_socket.recv(1024)
print(request) # 没解码, 字节数据
# 2.返回http格式数据给浏览器
# 2.1准备header
response = "HTTP/1.1 200 OK\r\n" # 必须是\r\n(window实现换行)
response += "\r\n"
# 2.2准备body
response += "hello world"
new_socket.send(response.encode("utf-8")) # encode编码成字节码
# 3.关闭套接字
new_socket.close()
def main():
"""整体流程"""
# 1.创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.绑定
tcp_server_socket.bind(("", 8888))
# 3.监听套接字
tcp_server_socket.listen(128)
while True:
# 4.等待客户端连接
new_socket, client_addr = tcp_server_socket.accept()
# 5.处理客户端请求
service_client(new_socket)
tcp_server_socket.close()
if __name__ == "__main__":
main()
- 这种服务器的一个小bug
- 如果服务器异常终止时,下次运行会出现端口被占用的情况
- 估计是因为TCP连接还未释放?