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统计文本字符串里单词出现频率的方法
May 26 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
python 生成器生成杨辉三角的方法(必看)
Apr 10 Python
Python文件读写保存操作的示例代码
Sep 14 Python
python2与python3的print及字符串格式化小结
Nov 30 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
在django view中给form传入参数的例子
Jul 19 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 Python
jupyter note 实现将数据保存为word
Apr 14 Python
python连接mysql有哪些方法
Jun 24 Python
Python 使用Opencv实现目标检测与识别的示例代码
Sep 08 Python
pytorch实现ResNet结构的实例代码
May 17 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
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
2015/11/02 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
深入分析javascript中console命令
2016/08/14 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
vue的滚动条插件实现代码
2019/09/07 Javascript
JS实现放烟花效果
2020/03/10 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
python计算一个序列的平均值的方法
2015/07/11 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
PyQt5实现QLineEdit添加clicked信号的方法
2019/06/25 Python
python增加图像对比度的方法
2019/07/12 Python
Python for i in range ()用法详解
2020/09/18 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
在keras中对单一输入图像进行预测并返回预测结果操作
2020/07/09 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
技能比赛获奖感言
2014/02/14 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
Python Django项目和应用的创建详解
2021/11/27 Python
微信小程序实现轮播图指示器
2022/06/25 Javascript