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中threading模块的几个常用方法
Jun 18 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
python保存网页图片到本地的方法
Jul 24 Python
对pandas数据判断是否为NaN值的方法详解
Nov 06 Python
详解Python with/as使用说明
Dec 13 Python
Python使用Shelve保存对象方法总结
Jan 28 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
Feb 20 Python
Python生成器常见问题及解决方案
Mar 21 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
解决python3安装pandas出错的问题
May 20 Python
Python函数中apply、map、applymap的区别
Nov 27 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
解析smarty模板中类似for的功能实现
2013/06/18 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
理解 JavaScript 预解析
2009/10/25 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
Python操作MySQL数据库的方法
2018/06/20 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
Python新手学习标准库模块命名
2020/05/29 Python
python interpolate插值实例
2020/07/06 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
工作失职检讨书范文
2014/01/16 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
2015年司法局工作总结
2015/05/22 职场文书
演讲开场白和结束语
2015/05/29 职场文书