首页 > 编程语言 > 详细

python面向对象方式实现web服务器端

时间:2021-08-14 11:50:58      阅读:12      评论:0      收藏:0      [点我收藏+]
import socket
import threading

# 创建服务器类
class HTTPWebServer(object):
def __init__(self):
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建套接字对象
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 套接字复用
tcp_server_socket.bind((‘‘, 9998)) # 绑定端口
tcp_server_socket.listen(5) # 设置监听
self.tcp_server_socket = tcp_server_socket # 设置self属性
  
   # 设置开始方法
def start(self):
while True:
conn_socket, ip_port = self.tcp_server_socket.accept() # 接收浏览器客户端套接字数据
sub_thread = threading.Thread(target=self.handle_client_request, args=(conn_socket,)) # 创建线程
sub_thread.setDaemon(True) # 守护主线程
sub_thread.start() # 开始线程

   # 设置静态方法
@staticmethod
def handle_client_request(conn_socket):
recv_client_data = conn_socket.recv(4096) # 接收套接字对象
if len(recv_client_data) > 0: # 判断是否有数据
recv_client_content = recv_client_data.decode(‘utf-8‘) # 数据转码
request_path = recv_client_content.split(‘ ‘, maxsplit=2)[1] # 分割响应行
if request_path == ‘/‘: # 如果返回为‘/‘则连接到主页面
request_path = ‘/index.html‘
try:
with open(‘web‘ + request_path, ‘rb‘) as f: # 查询要访问的地址是否存在
file_data = f.read() # 存在则读取数据
except Exception as e: # 不存在则接收错误
response_line = ‘HTTP/1.1 404 Not Found\r\n‘ # 响应行
response_head = ‘Server:PWB1.0\r\n‘ # 响应头
with open(‘web/error.html‘, ‘rb‘) as f: # 打开错误时连接的地址
file_data = f.read() # 读取数据
response_body = file_data # 响应体
response_data = (response_line + response_head + ‘\r\n‘).encode(‘utf-8‘) + response_body # 组合成响应报文
conn_socket.send(response_data) # 返回数据
else: # 不报错时
response_line = ‘HTTP/1.1 200 ok\r\n‘ # 响应行
response_head = ‘Server:PWB1.0\r\n‘ # 响应头
response_body = file_data # 响应体
response_data = (response_line + response_head + ‘\r\n‘).encode(‘utf-8‘) + response_body # 组合成响应报文
conn_socket.send(response_data) # 返回数据

if __name__ == ‘__main__‘:
web_server = HTTPWebServer()
# 启动web服务器
web_server.start()

python面向对象方式实现web服务器端

原文:https://www.cnblogs.com/study-bigdata/p/15139610.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!