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中字符串类型json操作的注意事项
May 02 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
python爬取淘宝商品详情页数据
Feb 23 Python
Python应用库大全总结
May 30 Python
Python做智能家居温湿度报警系统
Sep 25 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
python实现猜数游戏(保存游戏记录)
Jun 22 Python
一文解决django 2.2与mysql兼容性问题
Jul 15 Python
Python脚本打包成可执行文件过程解析
Oct 20 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
Python中tkinter的用户登录管理的实现
Apr 22 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中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
学习YUI.Ext第七日-View&JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
监控 url fragment变化的js代码
2010/04/19 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
vue3.0生命周期的示例代码
2020/09/24 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
python实现随机梯度下降法
2020/03/24 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
介绍一下linux的文件系统
2012/03/20 面试题
How TDD works
2012/09/30 面试题
若干个Java基础面试题
2015/05/19 面试题
韩语专业本科生求职信
2013/10/01 职场文书
理想演讲稿范文
2014/05/21 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
优秀党员先进材料
2014/12/18 职场文书
2016年安全月活动总结
2016/04/06 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
python tkinter模块的简单使用
2021/04/07 Python