Python 实现一个简单的web服务器


Posted in Python onJanuary 03, 2021
import re
import socket


def service_cilent(new_socket):
  request = new_socket.recv(1024).decode("utf-8")
  # Python splitlines() 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
  request_lines = request.splitlines()
  print(request_lines)
  file_name = ""
  ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])
  if ret:
    file_name = ret.group(1)
    if file_name == "/":
      file_name = "index.html"
  try:
    f = open(file_name, "rb")
  except:
    response = "HTTP/1.1 404 NOT FOUND\r\n\r\n"
    response += "------file not found-----"
    new_socket.send(response.encode("utf-8"))
  else:
    # 打开文件成功就读文件 然后关闭文件指针
    html_content = f.read()
    f.close()
    # 准备发送给浏览器的数据---header
    response = "HTTP/1.1 200 OK\r\n\r\n"
    # 将response header发送给浏览器
    new_socket.send(response.encode("utf-8"))
    # 将response body发送给浏览器
    new_socket.send(html_content)
  # 关闭套接字
  new_socket.close()


def main():
  # 创建套接字
  tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  # 绑定
  tcp_server_socket.bind(("", 7089))
  # 监听套接字
  tcp_server_socket.listen(128)
  while True:
    new_socket, cilent_addr = tcp_server_socket.accept()
    service_cilent(new_socket)
  # 关闭监听套接字
  tcp_server_socket.close()


if __name__ == '__main__':
  main()

以上就是Python 实现一个简单的web服务器的详细内容,更多关于python 实现web服务器的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python开发的小球完全弹性碰撞游戏代码
Oct 15 Python
python读写ini配置文件方法实例分析
Jun 30 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
Python探索之SocketServer详解
Oct 28 Python
Python简单实现socket信息发送与监听功能示例
Jan 03 Python
Python实现图片尺寸缩放脚本
Mar 10 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
Apr 18 Python
Python assert语句的简单使用示例
Jul 28 Python
基于matplotlib中ion()和ioff()的使用详解
Jun 16 Python
详解Python中的路径问题
Sep 02 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 Python
Python 如何实现文件自动去重
Jun 02 Python
关于Python错误重试方法总结
Jan 03 #Python
详解python中的异常和文件读写
Jan 03 #Python
python绘制雷达图实例讲解
Jan 03 #Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 #Python
python安装mysql的依赖包mysql-python操作
Jan 01 #Python
python UDF 实现对csv批量md5加密操作
Jan 01 #Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 #Python
You might like
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
JS DOM 操作实现代码
2010/08/01 Javascript
iframe窗口高度自适应的实现方法
2014/01/08 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
js中new一个对象的过程
2017/02/20 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
wxPython 入门教程
2008/10/07 Python
跟老齐学Python之Python文档
2014/10/10 Python
讲解Python中的递归函数
2015/04/27 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
Python tkinter label 更新方法
2018/10/11 Python
Python 微信爬虫完整实例【单线程与多线程】
2019/07/06 Python
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
高一历史教学反思
2014/01/13 职场文书
小学庆六一活动方案
2014/02/28 职场文书
赔偿协议书范本
2014/04/15 职场文书
音乐教师求职信范文
2015/03/20 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python