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登录QQ邮箱发信的实现代码
Feb 10 Python
Python迭代用法实例教程
Sep 08 Python
Python生成器(Generator)详解
Apr 13 Python
python中requests小技巧
May 10 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
python如何将两个txt文件内容合并
Oct 18 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
使用Python实现画一个中国地图
Nov 23 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
一周学会PHP(视频)Http下载
2006/12/12 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
php远程下载类分享
2016/04/13 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
通过Python来使用七牛云存储的方法详解
2015/08/07 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
python自动生成model文件过程详解
2019/11/02 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
招标授权委托书样本
2014/09/23 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
工作年限证明模板
2015/06/15 职场文书
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python