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 相关文章推荐
使用setup.py安装python包和卸载python包的方法
Nov 27 Python
python中的yield使用方法
Feb 11 Python
Python程序设计入门(3)数组的使用
Jun 16 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
Nov 10 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
Python使用functools实现注解同步方法
Feb 06 Python
django 修改server端口号的方法
May 14 Python
对Python2与Python3中__bool__方法的差异详解
Nov 01 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
基于python实现查询ip地址来源
Jun 02 Python
Python3压缩和解压缩实现代码
Mar 01 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 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 xml文件操作实现代码(二)
2009/03/20 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
js变量以及其作用域详解
2020/07/18 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
python基于socket实现网络广播的方法
2015/04/29 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
python中函数默认值使用注意点详解
2016/06/01 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
荣耀商城:HIHONOR
2020/11/03 全球购物
总经理文秘岗位职责
2014/02/03 职场文书
基督教婚礼主持词
2014/03/14 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
建议书格式
2015/02/04 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
JavaScript获取URL参数的方法分享
2022/04/07 Javascript