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 解析XML文件
Apr 15 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
Python基础之函数用法实例详解
Sep 10 Python
简析Python的闭包和装饰器
Feb 26 Python
Python中进程和线程的区别详解
Oct 29 Python
Python实现连接postgresql数据库的方法分析
Dec 27 Python
Python操作mongodb的9个步骤
Jun 04 Python
Python从函数参数类型引出元组实例分析
May 28 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
使用Python pip怎么升级pip
Aug 11 Python
Django中celery的使用项目实例
Jul 07 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删除HTMl标签的实现代码
2013/06/30 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
在html页面上拖放移动标签
2010/01/08 Javascript
js对象的比较
2011/02/26 Javascript
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
微信小程序实现图片滚动效果示例
2018/12/05 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
微信公众号网页分享功能开发的示例代码
2020/05/27 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
python处理中文编码和判断编码示例
2014/02/26 Python
python多进程共享变量
2016/04/06 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
培训班开班仪式主持词
2014/03/28 职场文书
电子信息工程自荐信
2014/05/26 职场文书
音乐课外活动总结
2015/05/09 职场文书
遗失证明范文
2015/06/19 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python