功能:用户访问服务器可以返回指定页面
步骤:
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()# 发送消息方法@staticmethoddef 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)# 关闭socketclient_socket.close()if __name__ == '__main__':http1 = HttpServer()http1.start()

直接结果:可以正确的返回客户端请求的页面

Python高级——Web静态服务器(面向对象)相关推荐

  1. Python简易web静态服务器程序搭建

    Python简易web静态服务器程序搭建 Python自带简易静态web服务器搭建 http.server模块 DIY简易静态web服务器程序搭建 普通版 步骤 具体代码 面向对象版 代码 命令行版 ...

  2. pythonweb静态服务器_Python面向对象之Web静态服务器

    本文实例为大家分享了Python Web静态服务器的具体代码,供大家参考,具体内容如下 功能:用户访问服务器可以返回指定页面 步骤: 1.创建服务器类 2.创建初始化服务器配置方法 3.创建接收客户端 ...

  3. Python实现web动态服务器

    Python实现http动态服务器,有两种方法,一种是基本的实现方式,可扩展性差,但是是实现服务器的基础,第二种实现不修改服务器和架构代码而确保可以在多个架构下运行web服务器.都使用WSGI(Web ...

  4. python实现外部静态服务器,浏览器通过HTTP与之通信2

            因为网络间通信是基于TCP协议传输数据的,而服务器与浏览器之间通信是基于HTTP协议的,那么下面基于python实现一个tcp服务器,浏览器可以基于http协议进行发送请求和解析.浏览 ...

  5. python实现外部静态服务器,浏览器通过HTTP与之通信1

        因为网络间通信是基于TCP协议传输数据的,而服务器与浏览器之间通信是基于HTTP协议的,那么下面基于python实现一个tcp服务器,浏览器可以基于http协议进行发送请求和解析.展示浏览器返 ...

  6. python网页制作web_使用python创建web静态网站

    建立Django项目 打开pyCharm企业版软件,创建一个Django项目,其中Django是一个Web框架,用于帮助开发交互式网站的工具.生成项目文件如下图所示: image.png 创建网站主页 ...

  7. 【廖雪峰python总结】python高级特性,函数式编程,面向对象编程,面向对象高级编程

    文章目录 python复习总结 python高级特性 函数式编程 面向对象编程 面向对象高级编程 python复习总结 python高级特性 python高级特性 函数式编程 函数式编程 函数式编程的 ...

  8. pythonweb静态服务器_python实现外部静态服务器,浏览器通过HTTP与之通信2

    python实现外部静态服务器,浏览器通过HTTP与之通信2 发布时间:2019-07-10 14:29, 浏览次数:117 , 标签: python HTTP 因为网络间通信是基于TCP协议传输数据 ...

  9. web 静态页面和动态页面的区别

    文章目录 一.静态web页面: 二.动态web页面: 为什么需要web服务器?(web server) 三.关于两者区别的简单直接的描述 四.实验测试 一.静态web页面: 1.在静态Web程序中,客 ...

最新文章

  1. 区分真实模式的两个标准
  2. Unity SRP自定义渲染管线 -- 2.Custom Shaders
  3. 仅对此用户禁用 java_Spring Security实现禁止用户重复登陆的配置原理
  4. 在Linux下使用iconv转换字符串编码
  5. 【flink】95-260-045-源码-检查点-CheckPoint
  6. PostgreSQL删除数据
  7. RN animated缩放动画
  8. Android Export时错误提示:Conversion to Dalvik format failed with error 1
  9. 甘肃暴雨强度公式_我国若干城暴雨强度公式列表.doc
  10. 《伤心秦汉》2、从胯下崛起的将军——大汉淮阴侯韩信
  11. java excel 单元格 斜线_POI实现excel单元格画斜线
  12. 华为首部鸿蒙手机,液态镜头首次亮相亚美AM8探秘华为首部鸿蒙手机P50
  13. 杨歌:金融电路与 Web3 经济模型原理
  14. matlab信息隐藏图片,信息隐藏 实验二 BMP 图像信息隐藏
  15. 2016年中考计算机考试模拟试题,2016年计算机三级考试模拟试题(含答案)
  16. Linux面试必备基础知识(十一)——系统管理命令
  17. c语言-网吧管理系统
  18. 傲娇大少之——【GET请求和POST请求】
  19. 丙烯的精制工艺及在线监测
  20. Android开发真的要凉凉吗

热门文章

  1. 为你的网站加上SSL,可以使用HTTPS进行访问
  2. PowerTip of the Day-Finding Invalid Aliases
  3. 免费流量监控软件,最大可同时监控1000台电脑
  4. 面试:对象的生命周期
  5. 给 npm script 传递参数和添加注释
  6. 面试精讲之面试考点及大厂真题 - 分布式专栏 10 Redis雪崩,穿透,击穿三连问
  7. Oracle数据库表中字段顺序的修改方法
  8. 容器编排技术 -- Kubernetes 设计理念
  9. Oracle ORA-27102的解决办法(out of memory)
  10. layuimini 图标颜色便捷指定