python web server_简易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()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值