1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python高级——Web静态服务器(面向对象)

Python高级——Web静态服务器(面向对象)

时间:2018-10-30 01:54:31

相关推荐

Python高级——Web静态服务器(面向对象)

功能:用户访问服务器可以返回指定页面

步骤:

1.创建服务器类

2.创建初始化服务器配置方法

3.创建接收客户端请求的方法

4.创建发送响应报文给客户端方法

import socketimport reimport multiprocessing# Http服务器类class HttpServer:# 初始化属性def __init__(self):# 创建套接字self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置地址重用self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)# 绑定端口self.tcp_server_socket.bind(("", 8080))# 设置监听,最多建立128个连接self.tcp_server_socket.listen(128)def start(self):while True:# 接收客户端信息client_socket, ip_port = self.tcp_server_socket.accept()print('新用户:', ip_port, '已连接')# 创建新进程,给客户端返回响应报文t1 = multiprocessing.Process(target=self.recv_msg, args=(client_socket, ip_port))# 启动进程t1.start()# 关闭客户端套接字(多进程不共享资源,故先后需要关闭两次套接字)client_socket.close()# 发送消息方法@staticmethoddef recv_msg(client_socket, ip_port):# 接收客户端请求报文client_text = client_socket.recv(1024)if not client_text:print("客户端", ip_port, "已下线")client_socket.close()return# 请求报文解码client_text_str = client_text.decode()print(client_text_str)# 将请求报文切割client_list = client_text_str.split("\r\n")# 正则匹配出请求路径ret = re.search(r"\s(.*)\s", client_list[0])print(ret.group())# 匹配不到则请求报文错误if not ret:print("用户请求报文格式错误!")client_socket.close()return# 得到路径path_info = ret.group(1)# 设置默认路径if path_info == '/':path_info = '/index.html'print("接收到用户请求:", path_info)# 响应头response_header = "Server:Python-Web1.0\r\n"# 响应空行response_blank = "\r\n"try:# 读取指定路径文件,并且返回with open('web'+path_info, "rb") as file:# 读取文件的二进制数据response_content = file.read()# 找不到路径则返回404错误except Exception as e:# 开始拼接响应数据response_line = "HTTP/1.1 404 Not Found\r\n"response_content = "Error !!! %s" % str(e)response_content = response_content.encode()else:# 开始拼接响应数据response_line = "HTTP/1.1 200 OK\r\n"# 拼接响应头response_data = (response_line + response_header + response_blank).encode() + response_content# 发送数据client_socket.send(response_data)# 关闭socketclient_socket.close()if __name__ == '__main__':http1 = HttpServer()http1.start()

直接结果:可以正确的返回客户端请求的页面

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。