import socket
import re
import multiprocessing
import time
import mini_frame026
class WSGTServer(object):
def __init__(self):
# 1、創(chuàng)建套接字
self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 2郑气、綁定
self.tcp_server_socket.bind(("", 7890))# 空代表任何端口都可以
# 3卧斟、變?yōu)楸O(jiān)聽套接字(最大鏈接數(shù)128)
self.tcp_server_socket.listen(128)# 調(diào)用listen變?yōu)楸粍?dòng)
def service_client(self,new_socket):
# 為這個(gè)客戶端返回?cái)?shù)據(jù)
# 1距淫、接收瀏覽器發(fā)送過來的請(qǐng)求
# GET / HTTP/1.1
# ......
request = new_socket.recv(1024).decode("utf-8")
# print('<<<<<' * 20)
# print(request)
request_lines = request.splitlines()
print("")
print(">" * 20)
print(request_lines)
# GET /index.py HTTP/1.1
# get post put del
ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])# *:0個(gè)~~多個(gè)
file_name = ""
if ret:
file_name = ret.group(1)
print("*" * 50, file_name)
if file_name == '/':
file_name = '/絲芙蘭.html'
# 2、返回HTTP格式的數(shù)據(jù)給瀏覽器
# 2.1 如果請(qǐng)求的資源不是以.py結(jié)尾过牙,那么就認(rèn)為是靜態(tài)資源(html/css/js/png/jpg)
if not file_name.endswith(".py"):
try:
# f = open("../創(chuàng)維官方商場(chǎng)-權(quán)威官網(wǎng) 彩電領(lǐng)導(dǎo)者/charry.html", "rb")
f = open("../sephore/" + file_name, "rb")
except:
response = "HTTP/1.1 404 NOT FOUND\r\n"
response += "\r\n"
response += "---FILE NOT FOUND---"
new_socket.send(response.encode("utf-8"))
else:
html_content = f.read()
f.close()
# 2.1準(zhǔn)備發(fā)送給瀏覽器的Header
response = "HTTP/1.1 200 OK\r\n"
response += "\r\n"
# 2.2準(zhǔn)備發(fā)送給瀏覽器的Body
# response += "<h1>hahaha</h1>"
# 將Response Heard 發(fā)送給瀏覽器
new_socket.send(response.encode("utf-8"))
# 將Response Body 發(fā)送給瀏覽器
new_socket.send(html_content)
else: # 2.2 如果是以.py結(jié)尾,就認(rèn)為是動(dòng)態(tài)資源的請(qǐng)求
header = "HTTP/1.1 200 OK\r\n"
header += "\r\n"
# # body = "hahaha %s" % time.ctime();
# if file_name == "/login.py"
# body = mini_frame026.login()
# elif file_name == "/register.py":
# body = mini_frame026.register()
body = mini_frame026.application(file_name)
response = header + body
# 發(fā)送response給瀏覽器
new_socket.send(response.encode("utf-8"))
# 關(guān)閉客戶端套接字
new_socket.close()
def run_forever(self):
while True:
# 4、等待新客戶端的連接
new_socket, client_addr = self.tcp_server_socket.accept()
# 5谴返、為這個(gè)客戶端服務(wù)
# service_client(new_socket)
p = multiprocessing.Process(target=self.service_client, args=(new_socket,))
p.start()
new_socket.close()
# 6、關(guān)閉監(jiān)聽套接字
self.tcp_server_socket.close()
def main():
# 用來完成整體的控制咧织,創(chuàng)建一個(gè)web服務(wù)器對(duì)象嗓袱,調(diào)用run_forever方法運(yùn)行
wsgi_server = WSGTServer()
wsgi_server.run_forever()
if __name__ == '__main__':
main()