#__author: han-zhang
#date: 2019/1/5 15:49
import socket,multiprocessing,re
def request_headers(client_socket,client_addr):
print(str(client_addr) + "连接成功")
#接受客户端请求
recv_data = client_socket.recv(1024).decode("utf-8")
#以行形式切割数据
request_headers_lines = recv_data.splitlines()
#循环遍历打印
for line in request_headers_lines:
print(line)
http_request_line = request_headers_lines[0]
file_name = re.match(r"[^/]+(/[^ ]*)",http_request_line).group(1)
#group() 0表示全部 1表示第一个
print("frist file name is %s" % file_name)
if file_name == "/":
new_file_name = "/index.html"
print("*"*10)
else:
new_file_name = file_name
print("="*10)
try:
f = open(new_file_name,"rb")
except:
#如果未找到
response_header = "HTTP/ 404 NOT FOUND\r\n"
response_header += "\r\n"
response_body ="===sorry ==="
else:
response_header = "HTTP/200 OK\r\n"
response_header += "\r\n"
response_body =f.read()
finally:
client_socket.sendall(response_header.encode('utf-8'))
client_socket.sendall(response_body.encode("utf-8"))
client_socket.close()
def main():
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("localhost",8000))
server_socket.listen(5)
print("server is readly")
while True:
client_socket,client_addr = server_socket.accept()
p = multiprocessing.Process(target=request_headers,args=(client_socket,client_addr))
p.start()
#在创建子进程的过程中,子进程会复制一份主进程的运行环境
#进程中的socket对象,第一个点是节省资源,第二个点是方便等待连接其他的客户端
server_socket.close() #不能
if __name__ == "__main__":
main()
未经笔者允许,不得转载