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下函数参数的传递(参数带星号的说明)
Sep 19 Python
python使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
wxPython定时器wx.Timer简单应用实例
Jun 03 Python
python开发之str.format()用法实例分析
Feb 22 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
Jun 04 Python
Python中一些深不见底的“坑”
Jun 12 Python
详解python pandas 分组统计的方法
Jul 30 Python
基于plt.title无法显示中文的快速解决
May 16 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 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技术开发技巧分享
2010/03/23 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
使用JS 清空File控件的路径值
2013/07/08 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
bmob js-sdk 在vue中的使用教程
2018/01/21 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
python简单程序读取串口信息的方法
2015/03/13 Python
Python中的urllib模块使用详解
2015/07/07 Python
Python实现配置文件备份的方法
2015/07/30 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
python中取绝对值简单方法总结
2020/07/24 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
html5图片上传预览示例分享
2014/04/14 HTML / CSS
护理专科毕业生自荐书范文
2014/02/19 职场文书
气象学专业个人求职信
2014/03/15 职场文书
责任书格式范文
2014/07/28 职场文书
2014年市场部工作总结
2014/11/25 职场文书
初三毕业评语
2014/12/26 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
长江七号观后感
2015/06/11 职场文书