|

楼主 |
发表于 2018-6-22 09:43:25
|
显示全部楼层
- # coding = utf-8
- from socket import *
- from multiprocessing import Process
- import re
- # 设置静态文件根目录
- HTML_ROOT_DIR = "./html"
- class HTTPServer(object):
- def __init__(self):
- self.S = socket(AF_INET, SOCK_STREAM)
- self.S.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
- def start(self):
- self.S.listen(5)
- while True:
- client_socket, client_address = self.S.accept()
- print("[%s: %s]用户连接上了" % client_address)
- handle_client_process = Process(target=self.handle_client, args=(client_socket,))
- handle_client_process.start()
- client_socket.close()
- def handle_client(self,client_socket):
- """处理客户端请求"""
- request_data = client_socket.recv(1024)
- print(request_data)
- request_lines = request_data.splitlines()
- for line in request_lines:
- print(line)
- # 解析请求报文
- request_start_line = request_lines[0]
- # 提取用户请求的文件名
- print(request_start_line.decode("utf-8"))
- file_name = re.match(r"\w+ +(/[^ ]*) ", request_start_line.decode("utf-8")).group(1)
- if "/" == file_name:
- file_name = "/index.html"
- # 打开文件
- try:
- file = open(HTML_ROOT_DIR + file_name, "rb")
- except IOError:
- response_start_line = "HTTP/1.1 404 Not Found\r\n"
- response_headers = "Server:My server\r\n"
- response_body = "the file is not found!"
- else:
- file_data = file.read()
- file.close()
- # 构造相应数据
- response_start_line = "HTTP/1.1 200 OK\r\n"
- response_headers = "Server:My server\r\n"
- response_body = file_data.decode("utf-8")
- response = response_start_line + response_headers + "\r\n" + response_body
- print("response data:", response)
- client_socket.send(bytes(response, "utf-8"))
- client_socket.close()
- def bind(self, port):
- self.S.bind(("",port))
- def main():
- http_server = HTTPServer()
- http_server.bind(8000)
- http_server.start()
- if __name__ == "__main__":
- main()
复制代码 |
|