#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. Queue depth

    Queue depth - It is the number of I/O requests that can be kept waiting to be serviced in a port que ...

  2. SQLSERVER 2012 之 “代理 XP”组件已作为此服务器安全配置的一部分被关闭

    新建维护计划的时候遇到下图的报错信息 标题: Microsoft SQL Server Management Studio ------------------------------ “代理 XP” ...

  3. tar 的–exclude参数,实现不包括某些文件(转)

    最近有人问我tar压缩能不能不包含不想要的文件或者文件夹 压缩包很利于传送,备份等等.但比如大量的日志文件一般是不需要备份,或者需要分开备份. tar参数中的–exclude,这个是我在看鸟哥私房菜时 ...

  4. apache的性能调配 MaxClients 与MaxRequestsPerChild

    因近期服务不稳定,现象和这个比较类似http://hi.baidu.com/xinfeng999/blog/item/1aea470e214ab1cd7acbe1ed.html根据现象来对APACHE ...

  5. 你被R语言的=和<-搞昏了头吗

    学习R有一周了,心中一直有一个困惑,关于= 和 <-,今晚决定搞定它! 迄今为止用到最多的函数是matrix() 和c(),就用他们说起!   之前学了四五门语言,对于=赋值已经成了惯性,下面是 ...

  6. Effective Java 第三版——36. 使用EnumSet替代位属性

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  7. iOS的动态代理模式的实现

    动态代理模式的应用很多,特别是在不能修改被代理类的前提下,要对执行某些方法时需要打log或者捕捉异常等处理时,是一个非常方便的方法.只需要少量修改客户端(场景类)代码和添加一个代理类就可以实现,这个符 ...

  8. pattern-matching as an expression without a prior match -scala

    https://www.scala-lang.org/files/archive/spec/2.11/08-pattern-matching.html https://docs.scala-lang. ...

  9. java this 子类调父类,父类再调用子类已覆盖的方法及属性(又一次理解)

    之前一直以为 this关键字 是指调用者对象,但是这次才真正理解,this代表当前对象,但是指向调用者对象,其实就是多态的用法,如下所示:B 继承了 A,在B 中调用A类的方法,在A 中用this 访 ...

  10. Selenium Web 自动化 - 项目实战(二)

    Selenium Web 自动化 - 项目实战(二) 2016-08-08 什么是数据驱动?简答的理解就是测试数据决定了测试结果,这就是所谓数据驱动.数据驱动包含了数据,他就是测试数据,在自动化领域里 ...