02-返回固定数据版本
目标¶
- 能够实现简单的Web服务器并
返回固定数据
给浏览器
1. 实现效果:¶
2. 整体功能:¶
1、Web服务器能够绑定固定端口
2、Web服务器端能够接收浏览器请求
3、Web服务器遵守HTTP协议,并返回“HelloWrold”字符串给浏览器
4、当浏览器关闭后,Web服务器能够显示断开连接
5、Web服务器短时间内重启,不会提示 address already in use 错误
3. 实现步骤¶
1、导入socket模块
2、创建tcp套接字
3、设置地址重用
4、绑定端口
5、设置监听,最大允许客户端连接数128(套接字有主动变为被动)
6、等待客户端连接(能够接受多个客户端连接)
7、定义函数,实现客户端信息接收和响应
8、接收浏览器请求,并判断请求是否为空
9、拼接响应报文
10、定义变量保存响应报文内容
11、发送响应报文给客户端浏览器
12、关闭此次连接的套接字
4. 代码实现¶
import socket
def request_handler(new_client_socket):
""" 响应客户端请求的核心函数 """
request_data = new_client_socket.recv(1024)
# 判断客户端是否已经断开链接
if not request_data:
print("客户端已经断开连接!")
# 关闭当前连接
new_client_socket.close()
# 退出,代码不再向后执行
return
# 开始拼接响应数据
response_line = "HTTP/1.1 200 OK\r\n"
response_header = "Server:Python-Web1.0\r\n"
response_blank = "\r\n"
response_content = "HelloWorld!"
# 拼接响应头
response_data = response_line + response_header + response_blank + response_content
# 发送数据
new_client_socket.send(response_data.encode())
# 关闭socket
new_client_socket.close()
def main():
# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP 和端口
tcp_server_socket.bind(("", 8080))
# 设置套接字为被动套接字,主要接收客户端链接
tcp_server_socket.listen(128)
while True:
# 接受客户端链接
new_client_socket, ip_port = tcp_server_socket.accept()
print("[新客户端上线]", ip_port)
# 相应客户端请求,发送数据给客户端
request_handler(new_client_socket)
if __name__ == '__main__':
main()
通过开发工具调试此次请求
能够看到服务器响应的数据