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之画圈还不简单吗?
Sep 20 Python
Python实现查找系统盘中需要找的字符
Jul 14 Python
Python调用系统底层API播放wav文件的方法
Aug 11 Python
pandas中Timestamp类用法详解
Dec 11 Python
用Django实现一个可运行的区块链应用
Mar 08 Python
tensorflow更改变量的值实例
Jul 30 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
Python笔试面试题小结
Sep 07 Python
浅谈python 类方法/静态方法
Sep 18 Python
python 多线程共享全局变量的优劣
Sep 24 Python
python复合条件下的字典排序
Dec 18 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一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
javascript利用初始化数据装配模版的实现代码
2010/11/17 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
js跑步算法的实现代码
2013/12/04 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
Python语言的12个基础知识点小结
2014/07/10 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
django的登录注册系统的示例代码
2018/05/14 Python
Python对象与引用的介绍
2019/01/24 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
python实现控制台输出颜色
2021/03/02 Python
2014年社区植树节活动方案
2014/02/28 职场文书
爱情寄语大全
2014/04/09 职场文书
团代会开幕词
2015/01/28 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
大学生党员个人总结
2015/02/13 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技