Python面向对象之Web静态服务器


Posted in Python onSeptember 03, 2019

本文实例为大家分享了Python Web静态服务器的具体代码,供大家参考,具体内容如下

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

步骤:

1.创建服务器类
2.创建初始化服务器配置方法
3.创建接收客户端请求的方法
4.创建发送响应报文给客户端方法

import socket
import re
import 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()

 # 发送消息方法
 @staticmethod
 def 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)
  # 关闭socket
  client_socket.close()


if __name__ == '__main__':
 http1 = HttpServer()
 http1.start()

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

Python面向对象之Web静态服务器

Python面向对象之Web静态服务器

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的XML库4Suite Server的介绍
Apr 14 Python
python机器学习之决策树分类详解
Dec 20 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
详解PyCharm配置Anaconda的艰难心路历程
Aug 13 Python
Django框架实现的简单分页功能示例
Dec 04 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
Django实现发送邮件功能
Jul 18 Python
wxPython实现列表增删改查功能
Nov 19 Python
Python如何在DataFrame增加数值
Feb 14 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
在Windows下安装配置CPU版的PyTorch的方法
Apr 02 Python
教你如何使用Python下载B站视频的详细教程
Apr 29 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 #Python
Django中间件拦截未登录url实例详解
Sep 03 #Python
如何为Python终端提供持久性历史记录
Sep 03 #Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 #Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 #Python
python实现静态web服务器
Sep 03 #Python
Python的Lambda函数用法详解
Sep 03 #Python
You might like
无数据库的详细域名查询程序PHP版(4)
2006/10/09 PHP
php基础知识:类与对象(5) static
2006/12/13 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现的防DDoS脚本
2011/02/08 Python
python中的五种异常处理机制介绍
2014/09/02 Python
Python字符串处理函数简明总结
2015/04/13 Python
Python栈类实例分析
2015/06/15 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
2019/06/21 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
军训考核自我鉴定
2014/02/13 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
市场营销方案范文
2014/03/11 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
第二次离婚起诉书
2015/05/18 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
Github 使用python对copilot做些简单使用测试
2022/04/14 Python