企业网站模板网 凡建站,电商图片助手,网站的图片怎么更换,建设库官网查询系统1. 以面向对象的方式开发静态Web服务器
实现步骤:
把提供服务的Web服务器抽象成一个类(HTTPWebServer)提供Web服务器的初始化方法#xff0c;在初始化方法里面创建socket对象提供一个开启Web服务器的方法#xff0c;让Web服务器处理客户端请求操作。
2. 静态Web服务器-面向…1. 以面向对象的方式开发静态Web服务器
实现步骤:
把提供服务的Web服务器抽象成一个类(HTTPWebServer)提供Web服务器的初始化方法在初始化方法里面创建socket对象提供一个开启Web服务器的方法让Web服务器处理客户端请求操作。
2. 静态Web服务器-面向对象开发的示例代码
import socket
import threading# 定义web服务器类
class HttpWebServer(object):def __init__(self):# 创建tcp服务端套接字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((, 9000))# 设置监听tcp_server_socket.listen(128)# 保存创建成功的服务器套接字self.tcp_server_socket tcp_server_socket# 处理客户端的请求staticmethoddef handle_client_request(new_socket):# 代码执行到此说明连接建立成功recv_client_data new_socket.recv(4096)if len(recv_client_data) 0:print(关闭浏览器了)new_socket.close()return# 对二进制数据进行解码recv_client_content recv_client_data.decode(utf-8)print(recv_client_content)# 根据指定字符串进行分割 最大分割次数指定2request_list recv_client_content.split( , maxsplit2)# 获取请求资源路径request_path request_list[1]print(request_path)# 判断请求的是否是根目录如果条件成立指定首页数据返回if request_path /:request_path /index.htmltry:# 动态打开指定文件with open(static request_path, rb) as file:# 读取文件数据file_data file.read()except Exception as e:# 请求资源不存在返回404数据# 响应行response_line HTTP/1.1 404 Not Found\r\n# 响应头response_header Server: PWS1.0\r\nwith open(static/error.html, rb) as file:file_data file.read()# 响应体response_body file_data# 拼接响应报文response_data (response_line response_header \r\n).encode(utf-8) response_body# 发送数据new_socket.send(response_data)else:# 响应行response_line HTTP/1.1 200 OK\r\n# 响应头response_header Server: PWS1.0\r\n# 响应体response_body file_data# 拼接响应报文response_data (response_line response_header \r\n).encode(utf-8) response_body# 发送数据new_socket.send(response_data)finally:# 关闭服务与客户端的套接字new_socket.close()# 启动web服务器进行工作def start(self):while True:# 等待接受客户端的连接请求new_socket, ip_port self.tcp_server_socket.accept()# 当客户端和服务器建立连接程创建子线程sub_thread threading.Thread(targetself.handle_client_request, args(new_socket,))# 设置守护主线程sub_thread.setDaemon(True)# 启动子线程执行对应的任务sub_thread.start()# 程序入口函数
def main():# 创建web服务器对象web_server HttpWebServer()# 启动web服务器进行工作web_server.start()if __name__ __main__:main()3. 小结 把提供服务的Web服务器抽象成一个类(HTTPWebServer) class HttpWebServer(object):提供Web服务器的初始化方法在初始化方法里面创建socket对象 def __init__(self):# 初始化服务端套接字设置监听代码省略..提供一个开启Web服务器的方法让Web服务器处理客户端请求操作。 def start(self):while True:service_client_socket, ip_port self.tcp_server_socket.accept()# 连接建立成功开辟子线程处理客户端的请求sub_thread threading.Thread(targetself.handle_client_request, args(service_client_socket,))sub_thread.start()