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通过pil为png图片填充上背景颜色的方法
Mar 17 Python
Python中的ConfigParser模块使用详解
May 04 Python
Python中生成Epoch的方法
Apr 26 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
浅谈Python在pycharm中的调试(debug)
Nov 29 Python
Python I/O与进程的详细讲解
Mar 08 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
python 生成器和迭代器的原理解析
Oct 12 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
基于python实现获取网页图片过程解析
May 11 Python
解决django框架model中外键不落实到数据库问题
May 20 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中的extract的作用分析
2008/04/09 PHP
joomla内置的表单验证功能使用方法
2010/06/11 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
Python实现的HTTP并发测试完整示例
2020/04/23 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
在CMD命令行中运行python脚本的方法
2018/05/12 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
Python调用C语言的实现
2019/07/26 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
浅析Python requests 模块
2020/10/09 Python
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
促销活动策划方案
2014/01/12 职场文书
学校体育节班级口号
2015/12/25 职场文书
股东出资协议书
2016/03/21 职场文书
创业计划书详解
2019/07/19 职场文书