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中字典映射类型的学习教程
Aug 20 Python
简介二分查找算法与相关的Python实现示例
Aug 26 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
Python的iOS自动化打包实例代码
Nov 22 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
wxPython色环电阻计算器
Nov 18 Python
Django配置文件代码说明
Dec 04 Python
Python函数参数类型及排序原理总结
Dec 19 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
python中JWT用户认证的实现
May 18 Python
Python获取浏览器窗口句柄过程解析
Jul 25 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
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
extjs form textfield的隐藏方法
2008/12/29 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
为超链接加上disabled后的故事
2010/12/10 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
python的id()函数介绍
2013/02/10 Python
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
Django权限控制的使用
2021/01/07 Python
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
后勤园长自我鉴定
2013/10/17 职场文书
2016年元旦寄语
2015/08/17 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS
浅谈Python响应式类库RxPy
2021/06/14 Python
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS