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 相关文章推荐
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
python写一个md5解密器示例
Feb 23 Python
解决python3中解压zip文件是文件名乱码的问题
Mar 22 Python
Python实现决策树C4.5算法的示例
May 30 Python
对python 操作solr索引数据的实例详解
Dec 07 Python
python write无法写入文件的解决方法
Jan 23 Python
Django中的cookie和session
Aug 27 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
Python yield生成器和return对比代码实例
Apr 20 Python
python中如何打包用户自定义模块
Sep 23 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 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
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
php日历制作代码分享
2014/01/20 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
基于打包工具Webpack进行项目开发实例
2018/05/29 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
layui实现数据表格隐藏列的示例
2019/10/25 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
Python中isnumeric()方法的使用简介
2015/05/19 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
为什么要做架构设计
2015/07/08 面试题
竞选大队委员演讲稿
2014/04/28 职场文书
中秋手机店促销方案
2014/06/16 职场文书
公司承诺函范文
2015/01/21 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫