版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDNgaoqingrui/article/details/80827806
http_WEB静态服务器部分,02_多任务返回指定页面
import re
import socket
import gevent
from gevent import monkey
monkey.patch_all()
def http_client(client_sk):
client_request = client_sk.recv(1024)
request = client_request.decode("utf-8")
file_name = re.search("/\S*", request)
if not file_name:
client_sk.close()
print('file_name is None')
return
file_path = file_name.group()
if "/" == file_path:
file_path = "/index.html"
# 打开文件,读取内容
try:
with open('static' + file_path, 'rb') as f:
file_data = f.read()
except Exception as e:
print(e)
response_start_line = "HTTP/1.1 404 Not Found\r\n"
response_headers = "Server: My server\r\n"
response_body = "<h1>The file is not found!</h1>".encode("utf-8")
response = (response_start_line + response_headers + "\r\n").encode('utf-8') + response_body
client_sk.send(response)
else:
# 构造响应数据
response_start_line = "HTTP/1.1 200 OK\r\n"
response_headers = "Server: My server\r\n"
response_body = file_data
response = (response_start_line + response_headers + "\r\n").encode('utf-8') + response_body
client_sk.send(response)
finally:
client_sk.close()
def main():
server_sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
server_sk.bind(('', 6500))
server_sk.listen(128)
while True:
client_sk, client_ipport = server_sk.accept()
print('%s, %s用户已连接' % client_ipport)
gevent.spawn(http_client, client_sk)
if __name__ == '__main__':
main()