简易web server之python实现

简介: 网络编程一项基本功是socket编程,包括TCP socket,UDP socket的客户端、服务器端编程。应用层的各路协议如http,smtp,telnet,ftp等都依赖于传输层的TCP或者UDP,具体讲就是这两种socket为应用层提供传输功能。

网络编程一项基本功是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()
目录
相关文章
|
4天前
|
数据库 Python
Python实践:从零开始构建你的第一个Web应用
使用Python和轻量级Web框架Flask,你可以轻松创建Web应用。先确保安装了Python,然后通过`pip install Flask`安装Flask。在`app.py`中编写基本的"Hello, World!"应用,定义路由`@app.route('/')`并运行`python app.py`启动服务器。扩展应用,可添加新路由显示当前时间,展示Flask处理动态内容的能力。开始你的Web开发之旅吧!【6月更文挑战第13天】
24 2
|
7天前
|
开发框架 数据库 开发者
Web开发新境界:用Python玩转Django和Flask!
【6月更文挑战第12天】Python的Web开发框架Django和Flask各有千秋。Django是全能型框架,适合快速开发大型应用,提供ORM、模板引擎、URL路由和后台管理等全面功能。Flask则轻量级且灵活,适用于小型到中型应用,以其简单易用、高度可扩展和灵活路由著称。两者结合使用,能应对各种Web开发需求。
|
20天前
|
缓存 自然语言处理 数据库
构建高效Python Web应用:异步编程与Tornado框架
【5月更文挑战第30天】在追求高性能Web应用开发的时代,异步编程已成为提升响应速度和处理并发请求的关键手段。本文将深入探讨Python世界中的异步编程技术,特别是Tornado框架如何利用非阻塞I/O和事件循环机制来优化Web服务的性能。我们将剖析Tornado的核心组件,并通过实例演示如何构建一个高效的Web服务。
|
1天前
|
关系型数据库 MySQL 数据库
如何使用Python的Flask框架来构建一个简单的Web应用
如何使用Python的Flask框架来构建一个简单的Web应用
6 0
|
2天前
|
XML 前端开发 数据挖掘
Web数据提取:Python中BeautifulSoup与htmltab的结合使用
Web数据提取:Python中BeautifulSoup与htmltab的结合使用
|
6天前
|
XML 数据格式 Python
Python基础教程(第3版)中文版 第15章 python和web(笔记)
Python基础教程(第3版)中文版 第15章 python和web(笔记)
|
12天前
|
tengine 安全 应用服务中间件
修改Nginx/Tengine版本名称伪装任意WEB SERVER
修改Nginx/Tengine版本名称伪装任意WEB SERVER
|
12天前
|
移动开发 Java Maven
基于OSGi的Virgo Server最简单Spring web实例
基于OSGi的Virgo Server最简单Spring web实例
16 0
|
14天前
|
SQL 前端开发 关系型数据库
28. Python Web 编程:Django 基础教程
28. Python Web 编程:Django 基础教程
17 2
|
14天前
|
开发框架 安全 网络协议
27.Python Web 编程基础
27.Python Web 编程基础
17 3

热门文章

最新文章