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实现递归版汉诺塔示例(汉诺塔递归算法)
Apr 08 Python
python通过imaplib模块读取gmail里邮件的方法
May 08 Python
Python使用shelve模块实现简单数据存储的方法
May 20 Python
Python功能键的读取方法
May 28 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
May 17 Python
Python离线安装PIL 模块的方法
Jan 08 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
Python类如何定义私有变量
Feb 03 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
sklearn中的交叉验证的实现(Cross-Validation)
Feb 22 Python
详解Python小数据池和代码块缓存机制
Apr 07 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
一个用php3编写的简单计数器
2006/10/09 PHP
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
php常用文件操作函数汇总
2014/11/22 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
js选项卡的制作方法
2017/01/23 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
nvm、nrm、npm 安装和使用详解(小结)
2019/01/17 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
解决python super()调用多重继承函数的问题
2019/06/26 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
什么是索引指示器
2012/08/20 面试题
学校春季防火方案
2014/06/08 职场文书
大学生简短的自我评价
2014/09/12 职场文书
公司授权委托书样本
2014/09/15 职场文书
2015年大学生工作总结
2015/04/21 职场文书
作息时间调整通知
2015/04/22 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python