#coding:utf-8
'''
2018-6-18 14:47:23
创建一个静态服务器访问指定页面 http://127.0.0.1:8000/
'''
import socket from multiprocessing import Process HTML_ROOT_DIR = "" def handle_client(client_socket):
''' 处理客户端请求'''
# 获取客户端请求数据
request_data = client_socket.recv(1024)
print("request_data:",request_data) # 构造相应数据
response_start_line = "HTTP/1.1 200 OK\r\n"
response_headers = "Sever:My server\r\n"
response_body = "hello itcast"
response = response_start_line+response_headers+"\r\n"+response_body
print("response data:",response)
# 向客户端返回响应数据
client_socket.send(bytes(reponse,"utf-8")) # 关闭客户端连接
client_socket.close() def main():
#tcp socket 服务端
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("",8003))
server_socket.listen(128) while True:
client_socket,client_address = server_socket.accept()
print("")
#创建一个进程
handle_client_process = Process(target=handle_client,args=(client_socket,))
handle_client_process.start()
client_socket.close() if __name__ == '__main__':
main()
#coding:utf-8
'''
2018-6-18 18:05:41
创建一个静态服务器访问指定页面 http://127.0.0.1:8000/index.html
'''
import socket
import re
from multiprocessing import Process # 设置静态文件根目录 常量全大写
HTML_ROOT_DIR = "./html" def handle_client(client_socket):
''' 处理客户端请求'''
# 获取客户端请求数据
request_data = client_socket.recv(1024)
print("request_data:",request_data)
request_lines = request_data.splitines()
for line in request_lines:
print(line) #解析请求报文
# 'GET?HTTP/1.1'
request_start_line = request_lines[0]
# 使用正则,拿到 index.html
file_name = re.match(r"\w+ +(/[^ ]*) ",request_start_line.decode(utf-8)).group(1) # 判断反过来写,防止少写一个等号 不可变的写在左边
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 Sever\r\n"
response_body = "The file is not found!"
else:
file_data = file.read().decode("utf-8")
file.close()
# 构造相应数据
response_start_line = "HTTP/1.1 200 OK\r\n"
response_headers = "Sever:My server\r\n"
response_body = file_data
finally:
response = response_start_line+response_headers+"\r\n"+response_body
print("response data:",response) # 向客户端返回响应数据 python3需要转换成字节
client_socket.send(bytes(reponse,"utf-8")) # 关闭客户端连接
client_socket.close() def main():
#tcp socket 服务端
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#设置socket参数
server_socket.setsockopt(socket.SOL_SOCKET,socket.SOL_REUSEADDR,1)
server_socket.bind(("",8000))
server_socket.listen(128) while True:
client_socket,client_address = server_socket.accept()
print("")
#创建一个进程
handle_client_process = Process(target=handle_client,args=(client_socket,))
handle_client_process.start()
client_socket.close() if __name__ == '__main__':
main()

6.18_web服务器内容的更多相关文章

  1. sqlserver查询分析器在本地服务器查看其它SqlServer服务器内容

    exec sp_addlinkedserver 服务器自命名,'',sqloledb,要查询服务器的IP地址 exec sp_addlinkedsrvlogin 服务器自命名,false,null,账 ...

  2. 和HTTP相关的web服务器内容

    一台web服务器可以搭建多个独立域名的网站,也可以作为通信路径上的中转服务器提升传输效率. 1. 用单台虚拟主机实现多个域名 多个域名解析后对应的ip地址相同,需要在Host首部中包含完整的主机名或者 ...

  3. MVC4 项目迁移 服务器被配置为不列出此目录的内容

    前言: 将服务器中已经发布在IIS7上的网站,迁移到虚拟机中. 方便以后出现问题了,可以在自己的虚拟机中做测试提高工作效率. 问题: 迁移的6个MVC项目中有俩个碰到如下问题. 应用程序"T ...

  4. 【转】《从入门到精通云服务器》第七讲—负载均衡和CDN技术

    在IDC知识中,我们常常会遇上负载均衡与CDN的概念而不知所云.第一讲[什么是云计算], 我们提到过负载均衡,仅给大家留下了印象.这次我们将深入浅出的讲讲到底什么是负载均衡与CDN技术.---互联网数 ...

  5. 常见的web容器与应用程序服务器区别及对比

    tomcat 类型:servlet容器和HTTP web服务器 功能:实现了一些J2EE特性包括Java Servlet.JSP页面.Java EL和websocket,还有纯java的http we ...

  6. Web服务器的工作原理

    Web服务器的工作原理 Web服务器工作原理概述 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它们是怎样处理来自全世界的http请求的?它们在幕后做了 ...

  7. web服务器工作原理

    Web服务器工作原理概述 转载自http://www.importnew.com/15020.html 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它 ...

  8. Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别

    2.8 Context 的使用Context 对象包含与当前页面相关的信息,提供对整个上下文的访问,包括请求.响应.以及上文中的Session 和Application 等信息.可以使用此对象在网页之 ...

  9. 一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系

    我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难.有意思的是Web服务器/Web容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现.本文将带读者对这四个相似概念如何区分. 1 ...

随机推荐

  1. Redis集群简记

    Redis集群 http://doc.redisfans.com/topic/cluster-tutorial.html redis 集群是为了多个节点之间数据的共享和集群高可用的保证. redis ...

  2. log4Net 高性能写入和CSV格式

    最近在使用log4net,在使用之前我们必须知道文件流是如何操作的,否则就是盲人摸向...,在FileAppender.cs文件里面有LockingModelBase来控制流的锁,默认有3个子类 Ex ...

  3. java中常用jar包

    commons-io.jar:可以看成是java.io的扩展,用来帮助进行IO功能开发.它包含三个主要的领域:Utilityclasses-提供一些静态方法来完成公共任务.Filters-提供文件过滤 ...

  4. UnDistracted for Mac(集中注意力辅助工具)破解版安装

    1.软件简介    UnDistracted 是 macOS 系统上一款可以帮助我们集中注意力的辅助工具,让我们在 mac 电脑上工作更加集中注意力,提高工作效率,隐藏所有文件或是文件夹窗口.隐藏所有 ...

  5. Nginx 访问认证

    简介 在实际工作中,企业中有些网站,要求使用账号和密码才能访问,如网站后台.phpMyAdmin .Wiki 平台 等 模块ngx_http_auth_basic_module 允许使用"H ...

  6. 最近对latin-1这个字符集产生了不少好感

    [简介] 最近我要解析一个数据库中间件的日志.这个中间件会在日志中记录SQL发往的后台DB ,执行耗时,对应的SQL:中间件直接把SQL写到 了日志中去,并没有对SQL进行适当的编码转换:理想情况下这 ...

  7. 从NSTimer的失效性谈起(二):关于GCD Timer和libdispatch

    一.GCD Timer的创建和安放 尽管GCD Timer并不依赖于NSRunLoop,可是有没有可能在某种情况下,GCD Timer也失效了?就好比一開始我们也不知道NSTimer相应着一个runl ...

  8. 【工具】我的Git学习日志

    使用github一段时间,一直使用的是可视化工具,配合公司转用git,提前联系下git的命令. 安装 windows上安装git 从git for windows下载安装包,我下的是Git-2.13. ...

  9. layui表单验证

    layui表单元素的校验只需在元素上加入lay-verify,layui提供了以下值. required(必填项) phone(手机号) email(邮箱) url(网址) number(数字) da ...

  10. 两次内存断点法寻找OEP

    所谓“两次内存断点法寻找OEP”,按照<加密与解密*第三版>上的解释来说,就是这样的.一般的外壳会依次对.text..rdata..data..rsrc区块进行解压(解密)处理,所以,可以 ...