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发送arp欺骗攻击代码分析
Jan 16 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
Flask解决跨域的问题示例代码
Feb 12 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
python+flask实现API的方法
Nov 21 Python
Python获取网段内ping通IP的方法
Jan 31 Python
Python Django view 两种return的实现方式
Mar 16 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
Python函数参数定义及传递方式解析
Jun 10 Python
python如何支持并发方法详解
Jul 25 Python
利用Python实现朋友圈中的九宫格图片效果
Sep 03 Python
Python内置数据类型中的集合详解
Mar 18 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 debug 安装技巧
2011/04/30 PHP
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
js实现登录拖拽窗口
2020/02/10 Javascript
js数组的基本使用总结
2021/01/18 Javascript
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
python 如何区分return和yield
2020/09/22 Python
Django跨域请求原理及实现代码
2020/11/14 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
联想英国官网:Lenovo英国
2019/07/17 全球购物
电信营业员自我评价分享
2014/01/17 职场文书
鸿星尔克广告词
2014/03/21 职场文书
学校运动会广播稿
2014/10/11 职场文书
初中化学教学反思
2016/02/22 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS