简易web server之python实现
网络编程一项基本功是socket编程,包括TCP socket,UDP socket的客户端、服务器端编程。
应用层的各路协议如http,smtp,telnet,ftp等都依赖于传输层的TCP或者UDP,具体讲就是这两种socket为应用层提供传输功能。
利用tcp socket能编写web server,它处理client端发起的http请求,然后发送响应。
TCP是面向连接的协议,也就是发送数据前需要双方发送控制字来建立连接(俗称三次握手),是client和server上的一个「欢迎套接字」进行通信,当成功连接上后,server端生成一个「连接套接字」,专门用于和这个客户互相发送数据。连接套接字和欢迎套接字是同一进程中不同线程,这样一来只有一个进程因此端口需要做出改变。高性能的web server一般都是这么搞的。
接下来我们动手写个web server
比如《计算机网络——自顶向下方法》第二章的一个题目:
用python开发一个简单web server,它仅能处理一个请求:当用户连接时创建套接字;从这个连接接受HTTP请求;解释该请求以确定所请求的文件;从服务器文件系统中获得请求的文件;创建一个由请求的文件组成的HTTP响应报文;经TCP连接想请求的浏览器发送响应。若请求的文件不存在则返回“404 not found”
不难写出答案:
#coding:utf-8
from socket import *
host = '' #对应本机所有ip地址
port = 8899 #TCP socket端口
address = (host, port)
serverSocket = socket(AF_INET, SOCK_STREAM) #创建TCP socket
serverSocket.bind(address) #绑定地址
serverSocket.listen(1) #开始监听
while True:
try:
connectionSocket, clientAddr = serverSocket.accept() #获取「连接套接字」
message = connectionSocket.recv(1024) #获得http报文
filename = message.split()[1] #获得URI,去掉首部'/'就是文件名
f = open(filename[1:])
outputdata = f.readlines() #逐行读出文件内容并存到list中
connectionSocket.send('HTTP/1.1 200 OK\r\n\r\n') #发response行
for i in range(0, len(outputdata)):
connectionSocket.send(outputdata) #把文件各行数据塞到response中
connectionSocket.close() #关闭数据连接
except IOError:
connectionSocket.send("404 not found") #文件不存在时异常处理
connectionSocket.close()
serverSocket.close()
简易web server之python实现的更多相关文章
- python搭建简易Web Server
如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等.那么, Python可能帮助你,使用Python可以完成一个简单的内建 HTT ...
- 使用Python创建一个简易的Web Server
Python 2.x中自带了SimpleHTTPServer模块,到Python3.x中,该模块被合并到了http.server模块中.使用该模块,可以快速创建一个简易的Web服务器. 我们在C:\U ...
- 小测几种python web server的性能
http://blog.csdn.net/raptor/article/details/8038476 因为换了nginx就不再使用mod_wsgi来跑web.py应用了,现在用的是gevent-ws ...
- Python Web Server Gateway Interface -- WSGI
了解了HTTP协议和HTML文档,我们其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作为HTTP响应的Body发送给 ...
- Notes on PEP333 (Python Web Server Gateway Interface)
This note is about PEP3333- Python Web Server Gateway Interface. Refer to (Source: http://legacy.pyt ...
- 【Python Programe】WSGI (Web Server Gateway Interface)
Part1: What is a Web server? 一个位于物理服务器上的网络服务器(服务器里的服务器),等待客户端去发送request,当服务器接收到request,就会生成一个respons ...
- python web server gateway interface (wsgi ) notes
前言: 注:如果需要得到支持批Python3.x以及包含了勘误表,附录,和说明的更新版规范,请查看PEP 3333 摘要: 这篇文档详细说明了一套在web服务器与Python web应用程序(web框 ...
- a simple and universal interface between web servers and web applications or frameworks: the Python Web Server Gateway Interface (WSGI).
WSGI is the Web Server Gateway Interface. It is a specification that describes how a web server comm ...
- python搭建web server
假设你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比方:Apache,ISS等.那么, Python 可能帮助你.使用Python能够完毕一个简单的内建 HT ...
随机推荐
- 【二维树状数组】【CF10D】 LCIS
传送门 Description 给你两个串,求他们的最长公共上升子序列 Input 第一行是第一个串的长度\(n\) 第二行\(n\)个数代表第一个串 第三行是第二个串的长度\(m\) 第四行\(m\ ...
- [树莓派]wifi在面板看不到,但是可以scan到的解决方案
突然遇到一个问题,发现在wifi面板中找不到WiFi,但是运行scan命令可以发现WiFi,多方查找资料终于找到了一个解决方案: 运行如下命令: sudo apt-get install wicd ...
- Codeforces Global Round 2 题解
Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给 ...
- kotlin Hello World 以及关键字
hello world:(支持函数式编程,不需要放到 class 中) fun main(args: Array<String>) { println("Hello World& ...
- AI技术说:人工智能相关概念与发展简史
作为近几年的一大热词,人工智能一直是科技圈不可忽视的一大风口.随着智能硬件的迭代,智能家居产品逐步走进千家万户,语音识别.图像识别等AI相关技术也经历了阶梯式发展.如何看待人工智能的本质?人工智能的飞 ...
- scp 从本地往线上传文件
scp /home/wwwroot/default/tf_ment.sql root@IP:/home/wwwroot/default/
- [DeeplearningAI笔记]卷积神经网络2.9-2.10迁移学习与数据增强
4.2深度卷积网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.9迁移学习 迁移学习的基础知识已经介绍过,本篇博文将介绍提高的部分. 提高迁移学习的速度 可以将迁移学习模型冻结的部分看 ...
- OpenCV---膨胀与腐蚀
膨胀 腐蚀 一:膨胀实现dilate import cv2 as cv import numpy as np def dilate_demo(image): #膨胀 print(image.shape ...
- eclipse+myeclipse 使用技巧备忘
myeclipse 导入多模块maven项目 https://blog.csdn.net/jack85986370/article/details/51371853 maven项目在eclipse的l ...
- awk是全局周期
需要折行时需要用转译符,转译回车,回车是提交命令 \ 如果你的命令中有单引号也可以 awk 支持C语言 awk '{name[$1]=name[$1]+$2} END{f ...