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导入oracle数据的方法
Jul 10 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python实现字典(dict)的迭代操作示例
Jun 05 Python
Python生成器generator用法示例
Aug 10 Python
对Python发送带header的http请求方法详解
Jan 02 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
Feb 25 Python
Python中的wordcloud库安装问题及解决方法
May 27 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
Aug 04 Python
python中uuid模块实例浅析
Dec 29 Python
python套接字socket通信
Apr 01 Python
Python中re模块的元字符使用小结
Apr 07 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 定界符 使用技巧
2009/06/14 PHP
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
2016/10/19 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
python中将字典转换成其json字符串
2014/07/16 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python学生信息管理系统修改版
2018/03/13 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
机电一体化专业应届本科生求职信
2013/09/27 职场文书
司机的工作范围及职责
2013/11/13 职场文书
抵押贷款承诺书
2014/05/30 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
2014年个人售房协议书
2014/10/30 职场文书
财务审计整改报告
2014/11/06 职场文书
教师工作表现评语
2014/12/31 职场文书
财务经理岗位职责
2015/01/31 职场文书
Win11怎么启动任务管理器?Win11启动任务管理器的几种方法
2021/11/23 数码科技