4 class类 web服务器
1.换行符
2.pycharm 连接Ubuntu
1)添加环境变量
2)查看ip
3)配置目录
4)上传或者下载
3.面向对象抽象web服务器
1)版本1:类
class HttpServer(object):
""""""
pass http_server = HttpServer()
2)版本2:初始化
class HttpServer(object):
""""""
def __init__(self,port):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server_socket.bind(("",port ))
self.server_socket.listen(128) http_server = HttpServer(8080)
3)版本3:定义方法
class HttpServer(object):
""""""
def __init__(self,port):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server_socket.bind(("", port))
self.server_socket.listen(128) def start(self):
pass def hand_client(self):
pass http_server = HttpServer(8080)
http_server.start()
4)版本4:调整
#-*- coding:utf-8 -*-
import socket
import re
#空行
from multiprocessing import Process # 设置静态文件根目录
HTML_ROOT_DIR = "./html" #常量全部要大写 class HttpServer(object):
""""""
def __init__(self,port):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server_socket.bind(("", port)) def start(self):
self.server_socket.listen(128)
while True:
client_socket, client_address = self.server_socket.accept() # 赋值的时候有空格
print("[%s,%s]用户连接上了" % client_address)
hand_client_process = Process(target=self.hand_client, args=(client_socket,))
# =函数名 不能有空格
hand_client_process.start()
client_socket.close() # 多进程会复制 client_socket def hand_client(self,client_socket):
"""处理客户端请求""" # 推荐""""""
# 获取客户端请求数据
request_data = client_socket.recv(1024)
print("request_data:", request_data)
request_data = request_data.decode("utf-8")
request_lines = request_data.splitlines()
print(request_lines) # 解析请求报文
for line in request_lines:
print(line)
# GET /favicon.ico HTTP/1.1
request_start_line = request_lines[0]
# 提取用户请求的文件名
file_name = re.match(r"\w+ +(/[^ ]*)", request_start_line).group(1)
print(file_name) if "/" == file_name: # 常量放在等号的左边
file_name = "/index.html" # 打开文件读取内容
try:
file = open(HTML_ROOT_DIR + file_name, "rb")
except IOError:
response_start_line = "HTTP/1.1 404 Not found \r\n"
response_headers = "Server: My server\r\n"
response_body = "the file is not found"
else:
file_data = file.read()
file.close() # 构造响应数据 # 空一格在加注释
response_start_line = "HTTP/1.1 200 OK \r\n"
response_headers = "Server: My server\r\n"
response_body = file_data.decode("utf-8") response = response_start_line + response_headers + "\r\n" + response_body
print("response:", response) # 向客户端返回相应数据
client_socket.send(bytes(response, "utf-8")) # 关闭客户端连接
client_socket.close() def main():
http_server = HttpServer(8080)
http_server.start() if __name__ == "__main__":
main()
5)版本5:增加bind方法
#-*- coding:utf-8 -*-
import socket
import re
#空行
from multiprocessing import Process # 设置静态文件根目录
HTML_ROOT_DIR = "./html" #常量全部要大写 class HttpServer(object):
""""""
def __init__(self):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) def start(self):
self.server_socket.listen(128)
while True:
client_socket, client_address = self.server_socket.accept() # 赋值的时候有空格
print("[%s,%s]用户连接上了" % client_address)
hand_client_process = Process(target=self.hand_client, args=(client_socket,))
# =函数名 不能有空格
hand_client_process.start()
client_socket.close() # 多进程会复制 client_socket def hand_client(self,client_socket):
"""处理客户端请求""" # 推荐""""""
# 获取客户端请求数据
request_data = client_socket.recv(1024)
print("request_data:", request_data)
request_data = request_data.decode("utf-8")
request_lines = request_data.splitlines()
print(request_lines) # 解析请求报文
for line in request_lines:
print(line)
# GET /favicon.ico HTTP/1.1
request_start_line = request_lines[0]
# 提取用户请求的文件名
file_name = re.match(r"\w+ +(/[^ ]*)", request_start_line).group(1)
print(file_name) if "/" == file_name: # 常量放在等号的左边
file_name = "/index.html" # 打开文件读取内容
try:
file = open(HTML_ROOT_DIR + file_name, "rb")
except IOError:
response_start_line = "HTTP/1.1 404 Not found \r\n"
response_headers = "Server: My server\r\n"
response_body = "the file is not found"
else:
file_data = file.read()
file.close() # 构造响应数据 # 空一格在加注释
response_start_line = "HTTP/1.1 200 OK \r\n"
response_headers = "Server: My server\r\n"
response_body = file_data.decode("utf-8") response = response_start_line + response_headers + "\r\n" + response_body
print("response:", response) # 向客户端返回相应数据
client_socket.send(bytes(response, "utf-8")) # 关闭客户端连接
client_socket.close() def bind(self,port):
self.server_socket.bind(("", port)) def main():
http_server = HttpServer()
http_server.bind(8080)
http_server.start() if __name__ == "__main__":
main()
4 class类 web服务器的更多相关文章
- 一个C#的与web服务器交互的HttpClient类
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Net ...
- 闲来无聊,研究一下Web服务器 的源程序
web服务器是如何工作的 1989年的夏天,蒂姆.博纳斯-李开发了世界上第一个web服务器和web客户机.这个浏览器程序是一个简单的电话号码查询软件.最初的web服务器程序就是一个利用浏览器和web服 ...
- 一不小心写了个WEB服务器
开场 Web服务器是啥玩意? 是那个托管了我的网站的机器么? No,虽然那个也是服务器,但是我们今天要说的Web服务器主要是指像IIS这样一类的,用于处理request并返回response的工具,没 ...
- 基于轻量型Web服务器Raspkate的RESTful API的实现
在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RESTful API. 模块 首先让我们了解一下"模块&quo ...
- 自己实现一个简易web服务器
一个web服务器是网络应用中最基础的环节. 构建需要理解三个内容: 1.http协议 2.socket类 3.服务端实现原理 1.1 HTTP http请求 一般一个http请求包括以下三个部分: 1 ...
- 关于Web服务器的认识
马上就要毕业了,也要开始找工作了,大学写了这么多代码了,却没有好好总结一下常用的概念很是遗憾额,就通过这篇博客记录一下我最常用的一些知识好了. 说到Web服务器,有很多文章都介绍的很好,之前看到一篇非 ...
- 【WEB】一个简单的WEB服务器
WEB 服务器如何工作的? HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则.计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从H ...
- 基于OWin的Web服务器Katana发布版本3
当 ASP.NET 首次在 2002 年发布时,时代有所不同. 那时,Internet 仍处于起步阶段,大约有 5.69 亿用户,每个用户平均每天访问 Internet 的时间为 46 分钟,大约有 ...
- 自己动手模拟开发一个简单的Web服务器
开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...
随机推荐
- 描边时消除锯齿SetSmoothingMode
SmoothingModeAntiAlias 指定消除锯齿的呈现. SmoothingModeDefault 指定默认模式. SmoothingModeHighQuality 指定高质量.低速度呈现. ...
- 如何使用Putty登录安装在VirtualBox里的ubuntu
我是在Windows操作系统里用VirtualBox安装了ubuntu操作系统. 在VirtualBox里操作ubuntu的终端不是很方便,比如我想在Windows里复制一些命令到ubuntu的终端执 ...
- Django:模板系统
一,常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二,常量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊 ...
- 2018.12.19 Struts2 框架总复习
总结Struts2 框架 struts2技术的优势 项目开源,使用及拓展方便 提供Exception处理机制 Result方式的页面导航,通过Result标签很方便的实现重定向和页面跳转 通过简单.集 ...
- Latex 编辑器安装
MiKTex + TexStudio 1. 下载安装MiKTex,从http://www.miktex.org/下载basic-miktex-2.9.5872-x64.exe,一路默认安装... 或者 ...
- axios简单了解
简单介绍 axios是基于客户端的promise,面向浏览器和nodejs 特色 浏览器端发起XMLHttpRequests请求 node端发起http请求 支持Promise API 监听请求和返回 ...
- HDU 1429 胜利大逃亡(续)(bfs+状态压缩,很经典)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- Oracle数据库中游标的游标的使用
本人不喜欢说概念啥的,就直接说明使用方法吧 案例1: DECALRE --声明游标 CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE ...
- linux 中$ 意思
grep -n sh$ text.txt 查找文件内容中以 Sh 结尾. grep -n ^a text.txt 文件文件内容中以 a 开头. grep -n ^$ text.txt ...
- iOS之出现( linker command failed with exit code 1)错误总结
本文出自:http://blog.csdn.NET/hengshujiyi/article/details/21182813 补充:我出现这个错误是一个工程中有两个同名的文件,只要删除掉一个就好了,可 ...