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 字符串和日期之间转换 StringAndDate
May 04 Python
Python扩展内置类型详解
Mar 26 Python
解决Python pandas df 写入excel 出现的问题
Jul 04 Python
Python干货:分享Python绘制六种可视化图表
Aug 27 Python
使用TensorFlow实现SVM
Sep 06 Python
python感知机实现代码
Jan 18 Python
解决Django后台ManyToManyField显示成Object的问题
Aug 09 Python
python zip()函数使用方法解析
Oct 31 Python
python numpy数组复制使用实例解析
Jan 10 Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 Python
Django crontab定时任务模块操作方法解析
Sep 10 Python
python输出国际象棋棋盘的实例分享
Nov 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/05/05 PHP
php接口与接口引用的深入解析
2013/08/09 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
jQuery提交多个表单的小例子
2013/06/30 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
浅谈JavaScript闭包
2019/04/09 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
js代码实现轮播图
2020/05/04 Javascript
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
Python sys.path详细介绍
2013/10/17 Python
Python3.x对JSON的一些操作示例
2017/09/01 Python
python实现简易版计算器
2020/06/22 Python
python递归下载文件夹下所有文件
2019/08/31 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
python右对齐的实例方法
2020/07/05 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
求职简历自荐信
2013/10/20 职场文书
如何做好总经理助理
2013/11/12 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
会计专业应届生自荐信
2014/02/07 职场文书
美术教师自我鉴定
2014/02/12 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
vue实现拖拽交换位置
2022/04/07 Vue.js
java中如何截取字符串最后一位
2022/07/07 Java/Android