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装饰器decorator介绍
Nov 21 Python
详解Python中的变量及其命名和打印
Mar 11 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
python实现员工管理系统
Jan 11 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
Python递归函数特点及原理解析
Mar 04 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
使用python批量修改XML文件中图像的depth值
Jul 22 Python
Python使用socket模块实现简单tcp通信
Aug 18 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 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使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
JSON语法五大要素图文介绍
2012/12/04 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
2015/11/17 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
ionic3 懒加载
2017/08/16 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
举例讲解Python中的算数运算符的用法
2015/05/13 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
python2与python3共存问题的解决方法
2018/09/18 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
python 公共方法汇总解析
2019/09/16 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
python 如何在测试中使用 Mock
2021/03/01 Python
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
大队委竞选演讲稿
2014/04/28 职场文书
党员群众路线承诺书
2014/05/20 职场文书
数学系毕业生求职信
2014/05/29 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python