传输 **HTTP** 协议格式的数据是基于 **TCP**传输协议的,发送数据之前需要先建立连接。
步骤:
- 编写一个TCP服务端程序
- 获取浏览器发送的http请求报文数据
- 读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器。
- HTTP响应报文数据发送完成以后,关闭服务于客户端的套接字。
import socket
if __name__ == '__main__':
# 创建服务端套接字
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(('', 8000))
# 设置监听
tcp_server_socket.listen(128)
# 循环等待接受客户端的连接请求
while True:
# 等待接受客户端的连接请求
new_socket, ip_port = tcp_server_socket.accept()
# 接收数据
recv_data = new_socket.recv(4096)
print(recv_data)
# 打开发送内容
with open('static/index.html', 'r') as file:
# 读取内容
file_data = file.read()
# 响应行
response_line = 'HTTP/1.1 200 OK\r\n'
# 响应头
response_header = 'Server: PWS/1.1\r\n'
# 响应体
response_body = file_data
# 将数据封装成http响应报文格式
response = response_line + response_header + '\r\n' + response_body
# 将数据编码成二进制
response_data = response.encode('utf-8')
# 发送响应报文数据
new_socket.send(response_data)
# 关闭服务于客户端的套接字
new_socket.close()
注意:响应行的HTTP/1.1 表示HTTP协议版本;200 :状态码;OK:状态描述。