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性能优化的20条建议
Oct 25 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
利用python实现xml与数据库读取转换的方法
Jun 17 Python
Python实现的弹球小游戏示例
Aug 01 Python
简单了解Django模板的使用
Dec 20 Python
答题辅助python代码实现
Jan 16 Python
解决python 输出是省略号的问题
Apr 19 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
在Python中COM口的调用方法
Jul 03 Python
Django应用程序入口WSGIHandler源码解析
Aug 05 Python
Python爬虫代理池搭建的方法步骤
Sep 28 Python
python操作toml文件的示例代码
Nov 27 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下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
php设计模式 Delegation(委托模式)
2011/06/26 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
DHTML Slide Show script图片轮换
2008/03/03 Javascript
javascript工具库代码
2012/03/29 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
Vue入门之animate过渡动画效果
2018/04/08 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
Python实现随机创建电话号码的方法示例
2018/12/07 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
python算的上脚本语言吗
2020/06/22 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
python中pdb模块实例用法
2021/01/15 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
恒华伟业笔试面试题
2015/02/26 面试题
幼儿生日活动方案
2014/08/27 职场文书
铣工实训报告
2014/11/05 职场文书
环境卫生标语
2015/08/03 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书