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实现的一个自动售饮料程序代码分享
Aug 25 Python
python调用API实现智能回复机器人
Apr 10 Python
使用实现pandas读取csv文件指定的前几行
Apr 20 Python
python3.X 抓取火车票信息【修正版】
Jun 19 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
Jun 14 Python
Python列表的切片实例讲解
Aug 20 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
python tkinter控件布局项目实例
Nov 04 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
jupyter notebook 多行输出实例
Apr 09 Python
Python新手学习raise用法
Jun 03 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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/11/30 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
php导出excel格式数据问题
2014/03/11 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
php和asp语法上的区别总结
2019/05/12 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
python实现二叉树的遍历
2017/12/11 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
工作迟到检讨书
2014/02/21 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
股权转让协议书范本
2014/04/12 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
道士塔读书笔记
2015/06/30 职场文书
法律服务所工作总结
2015/08/10 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书