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在线编译器的简单原理及简单实现代码
Feb 02 Python
纯python实现机器学习之kNN算法示例
Mar 01 Python
Python PyQt4实现QQ抽屉效果
Apr 20 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
python opencv进行图像拼接
Mar 27 Python
python 实现分组求和与分组累加求和代码
May 18 Python
python不同系统中打开方法
Jun 23 Python
python Pexpect模块的使用
Dec 25 Python
python基于selenium爬取斗鱼弹幕
Feb 20 Python
使用python向MongoDB插入时间字段的操作
May 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数组是否为空的代码
2011/09/08 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
浅谈PHP的反射机制
2016/12/15 PHP
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
JavaScript调用模式与this关键字绑定的关系
2018/04/21 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
python编程的核心知识点总结
2021/02/08 Python
numpy实现RNN原理实现
2021/03/02 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
毕业生的自我鉴定该怎么写
2013/12/02 职场文书
法人委托书的范本格式
2014/09/11 职场文书
2014年设计师工作总结
2014/11/25 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL