2 web服务器:固定返回值
1.老师给的思路
#tcp socket 服务端 socket = socket.socket()
socket.bind()
socket.listen()
client_socket = socket.accept() while True:
p = Process(target=fun, args=())
p.start()
client_socket.close() def fun(client_socket): #接受数据
#request_data = recv(1024)
#print(request_data)
#解析Http报文数据 request_data
#提取请求方式
#提取请求路径path
HTML_ROOT_DIR = "./html"
path = /index.html
/login.html
try:
file = open("index.html")
data = file.read()
file.close() except IOError:
"""
HTTP1.1 404 not found\r\n
\r\n
not found
""" #返回相应数据
"""
HTTP1.1 200 OK\r\n
\r\n
hello itcast
"""
#send()
#close()
2.自己写程序
2)版本1:主进程程序
from socket import *
from multiprocessing import Process def fun(client_socket):
pass def main(): #tcp socket 服务端
server_socket = socket(AF_INET,SOCK_STREAM)
server_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #防止端口不能重复访问
server_socket.bind(("",7788))
server_socket.listen(10)
client_socket = server_socket.accept() #等待接受电话 while True:
p = Process(target=fun, args=(client_socket,))
p.start()
client_socket.close() server_socket.close() if __name__ == "__main__":
main()
3)版本2:获取http报文头
from socket import *
from multiprocessing import Process def fun(client_socket,client_addr): #接受数据
#request_data = recv(1024)
#print(request_data)
request_data = client_socket.recv(1024)
print("[%s]\n%s"%(client_addr,request_data)) #解析Http报文数据 request_data
#提取请求方式
#提取请求路径path
#返回相应数据
#send()
#close() def main(): #tcp socket 服务端
server_socket = socket(AF_INET,SOCK_STREAM)
server_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #防止端口不能重复访问
server_socket.bind(("",8080))
server_socket.listen(10) while True:
client_socket, client_addr = server_socket.accept() # 等待接受电话
p = Process(target=fun, args=(client_socket,client_addr,))
p.start()
client_socket.close() server_socket.close() if __name__ == "__main__":
main()


4)版本3:获取html的内容
from socket import *
from multiprocessing import Process def fun(client_socket,client_addr): #接受数据
#request_data = recv(1024)
#print(request_data)
request_data = client_socket.recv(1024)
print("[%s]\n%s"%(client_addr,request_data)) request_data = str(request_data)
#解析Http报文数据 request_data #提取请求方式
print(request_data[2:5])
request_method = request_data[2:5] #提取请求路径path
print(request_data[6:8]) #返回相应数据
error_data = """
HTTP1.1 404 not found\r\n
\r\n
not found
"""
#HTML_ROOT_DIR = "./html"
#path = "index.html"
if request_method == "GET":
try:
file = open("./html/index.html")
data = file.read()
print(data)
file.close() except IOError:
error_data #send()
#close() def main(): #tcp socket 服务端
server_socket = socket(AF_INET,SOCK_STREAM)
server_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #防止端口不能重复访问
server_socket.bind(("",8080))
server_socket.listen(10) while True:
client_socket, client_addr = server_socket.accept() # 等待接受电话
p = Process(target=fun, args=(client_socket,client_addr,))
p.start()
client_socket.close() server_socket.close() if __name__ == "__main__":
main()
5)返回数据失败
from socket import *
from multiprocessing import Process def fun(client_socket,client_addr): #接受数据
#request_data = recv(1024)
#print(request_data)
request_data = client_socket.recv(1024)
print("[%s]\n%s"%(client_addr,request_data)) request_data = str(request_data)
#解析Http报文数据 request_data #提取请求方式
print(request_data[2:5])
request_method = request_data[2:5] #提取请求路径path
print(request_data[6:8]) #返回相应数据
error_data = """
HTTP1.1 404 not found\r\n
\r\n
not found
"""
#HTML_ROOT_DIR = "./html"
#path = "index.html" if request_method == "GET":
try:
file = open("./html/index.html")
data = file.read()
print(data)
file.close() except IOError:
error_data #send() send_data = """
HTTP1.1 200 OK\r\n
\r\n
hello itcast
"""
client_socket.send(send_data)
#close()
#client_socket.close() def main(): #tcp socket 服务端
server_socket = socket(AF_INET,SOCK_STREAM)
server_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #防止端口不能重复访问
server_socket.bind(("",8080))
server_socket.listen(10) while True:
client_socket, client_addr = server_socket.accept() # 等待接受电话
p = Process(target=fun, args=(client_socket,client_addr,))
p.start()
client_socket.close() server_socket.close() if __name__ == "__main__":
main()

6)返回数据?如何显示
#-*- coding:utf-8 -*-
from socket import *
from multiprocessing import Process def fun(client_socket,client_addr): #接受数据
#request_data = recv(1024)
#print(request_data)
request_data = client_socket.recv(1024)
print("[%s]\n%s"%(client_addr,request_data)) request_data = str(request_data)
#解析Http报文数据 request_data #提取请求方式
print(request_data[2:5])
request_method = request_data[2:5] #提取请求路径path
print(request_data[6:8]) #返回相应数据
error_data = """
HTTP1.1 404 not found\r\n
\r\n
not found
"""
#HTML_ROOT_DIR = "./html"
#path = "index.html" if request_method == "GET":
try:
file = open("./html/index.html")
data = file.read()
print(data)
file.close() except IOError:
error_data #send() send_data = """
HTTP1.1 200 OK\r\n
\r\n
hello itcast
"""
client_socket.send(bytes(send_data.encode("utf-8")))
#close()
#client_socket.close() def main(): #tcp socket 服务端
server_socket = socket(AF_INET,SOCK_STREAM)
server_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #防止端口不能重复访问
server_socket.bind(("",8080))
server_socket.listen(10) while True:
client_socket, client_addr = server_socket.accept() # 等待接受电话
p = Process(target=fun, args=(client_socket,client_addr,))
p.start()
client_socket.close() server_socket.close() if __name__ == "__main__":
main()

3.老师讲解
1)版本1:大框架
#-*- coding:utf-8 -*-
import socket
#空行
from multiprocessing import Process #AF_INET 是个常量
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("",8080))
server_socket.listen(128) #函数上面有空行2行
def hand_client(client_socket):
pass while True:
server_socket.accept()
client_socket,client_address = server_socket.recv(1024) #赋值的时候有空格
print(client_socket,client_address)
hand_client_process = Process(target=hand_client,args=(client_socket,))
#=函数名 不能有空格
hand_client_process.start()
client_socket.close() #多进程会复制 client_socket


2)版本2:请求数据
#-*- coding:utf-8 -*-
import socket
#空行
from multiprocessing import Process #函数上面有空行2行
def hand_client(client_socket):
"""处理客户端请求""" #推荐""""""
request_data = client_socket.recv(1024)
print(request_data) if __name__ == "__main__":
#AF_INET 是个常量
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("",8080))
server_socket.listen(128) while True:
server_socket.accept()
client_socket,client_address = server_socket.recv(1024) #赋值的时候有空格
print(client_socket,client_address)
hand_client_process = Process(target=hand_client,args=(client_socket,))
#=函数名 不能有空格
hand_client_process.start()
client_socket.close() #多进程会复制 client_socket
3)版本3:构造响应数据
#-*- coding:utf-8 -*-
import socket
#空行
from multiprocessing import Process #函数上面有空行2行
def hand_client(client_socket):
"""处理客户端请求""" #推荐""""""
request_data = client_socket.recv(1024)
print(request_data) response_start_line = "HTTP/1.1 200 OK \r\n"
response_headers = "Server: My server\r\n"
response_body = "hello world"
response = response_start_line + response_headers + "\r\n" +response_body
print(response) if __name__ == "__main__":
#AF_INET 是个常量
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("",8080))
server_socket.listen(128) while True:
server_socket.accept()
client_socket,client_address = server_socket.recv(1024) #赋值的时候有空格
print(client_socket,client_address)
hand_client_process = Process(target=hand_client,args=(client_socket,))
#=函数名 不能有空格
hand_client_process.start()
client_socket.close() #多进程会复制 client_socket
4)版本4:返回数据
#-*- coding:utf-8 -*-
import socket
#空行
from multiprocessing import Process #函数上面有空行2行
def hand_client(client_socket):
"""处理客户端请求""" #推荐""""""
request_data = client_socket.recv(1024)
print(request_data) response_start_line = "HTTP/1.1 200 OK \r\n"
response_headers = "Server: My server\r\n"
response_body = "hello world"
response = response_start_line + response_headers + "\r\n" +response_body
print(response) client_socket.send(bytes(response,"utf-8")) client_socket.close() if __name__ == "__main__":
#AF_INET 是个常量
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("",8080))
server_socket.listen(128) while True:
server_socket.accept()
client_socket,client_address = server_socket.recv(1024) #赋值的时候有空格
print(client_socket,client_address)
hand_client_process = Process(target=hand_client,args=(client_socket,))
#=函数名 不能有空格
hand_client_process.start()
client_socket.close() #多进程会复制 client_socket
5)大成版本:优化版
#-*- coding:utf-8 -*-
import socket
#空行
from multiprocessing import Process #函数上面有空行2行
def hand_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 = "Server: My server\r\n"
response_body = "hello world"
response = response_start_line + response_headers + "\r\n" +response_body
print("response:",response) # 向客户端返回相应数据
client_socket.send(bytes(response,"utf-8")) # 关闭客户端连接
client_socket.close() if __name__ == "__main__":
#AF_INET 是个常量
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("",8080))
server_socket.listen(128) while True:
client_socket, client_address = server_socket.accept() #赋值的时候有空格
print("[%s,%s]用户连接上了"%client_address)
hand_client_process = Process(target=hand_client,args=(client_socket,))
#=函数名 不能有空格
hand_client_process.start()
client_socket.close() #多进程会复制 client_socket




2 web服务器:固定返回值的更多相关文章
- Web Api 接口返回值不困惑:返回值类型详解
前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 WebApi 接口参数:传参详解,这篇博文内容本身很基础 ...
- 前端学HTTP之WEB服务器
前面的话 Web服务器每天会分发出数以亿计的Web页面,它是万维网的骨干.本文主要介绍WEB服务器的相关内容 总括 Web服务器会对HTTP请求进行处理并提供响应.术语“Web服务器”可以用来表示We ...
- JAVA编写WEB服务器
一.超文本传输协议 1.1 HTTP请求 1.2 HTTP应答 二.Socket类 三.ServerSocket类 四.Web服务器实例 4.1 HttpServer类 4.2 Requ ...
- 用java写一个web服务器
一.超文本传输协议 Web服务器和浏览器通过HTTP协议在Internet上发送和接收消息.HTTP协议是一种请求-应答式的协议——客户端发送一个请求,服务器返回该请求的应答.HTTP协议使用可靠的T ...
- 实战WEB 服务器(JAVA编写WEB服务器)
实战WEB 服务器(JAVA编写WEB服务器) 标签: web服务服务器javawebsockethttp服务器 2010-04-21 17:09 11631人阅读 评论(24) 收藏 举报 分类: ...
- HTTP之Web服务器是如何进行工作的!
Web服务器是如何进行工作的 ====================文章摘自<HTTP权威指南>====================== 1. 建立连接—接收一个客户端的连接,或者 ...
- 1.2Web API 2中的Action返回值
本主题描述 ASP.NET Web API 将返回值转换从一个控制器动作到 HTTP 响应消息. 一个 Web API 控制器动作可以返回下列任一操作 ︰ 1.void 2.IHttpActionRe ...
- linux下通过curl访问web服务器
在通过xshell或者其他远程连接工具连接linux服务器,没安装浏览器,却要测试web服务的请求: 可以使用curl 访问web服务器 例如返回百度的主页内容 #curl www.baidu.com ...
- 第五章、web服务器
一.web服务器 Web服务器就是整个万维网的骨干,广义上来说Web服务器既可以用来表示Web服务器的软件,也可以用来表示提供Web页面的特定设备和计算机.我们在网络上获取的所以资源,都需要有服务器来 ...
随机推荐
- Android——Intent,Bundle
Intent——切换activity intent.setClass(first.this,second.class); startActivity(intent); Bundle——切换时数据传递 ...
- react工程目录简介
首先我们可以看到底部一个 yarn.lock的文件,这个文件主要是项目依赖的安装包,他的一些版本号,会在这里做一些限制,这个文件不要动就好了. readme.md,这个文件其实是项目的说明文件,他里面 ...
- Yii2 指定log存放的文件
在main.php 文件里添加 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => ...
- PAT1064. Complete Binary Search Tree
1064. Complete Binary Search Tree 题目大意 给定一个序列, 求其 生成Complete BST 的层序遍历. 思路 最开始把这个题想复杂了, 还想着建立结构体, 其实 ...
- LINQ 方法
过滤操作符 Where 运算符(Linq扩展方法)根据给定条件过滤集合. 在其中扩展方法有以下两个重载.一个过载需要Func <TSource,bool>输入参数和第二个重载方法需要Fun ...
- ECMAScript6
ECMAScript6介绍 # ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现 # 有利于保证这门语言的开放性和中立性. # 标准在每年的 6 月份正 ...
- Java基础——XML复习
XML SGML : 标准通用置标语言 Standard Generailzed Markup Language XML ...
- TIDB1 —— TiDB简介
TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性. TiDB 具备如下核心特点: 1 高度兼容 MySQL 大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB, ...
- TCP套接字
端口的概念 每个电脑一根网线,但是你挂着QQ的同时还可以浏览网页.两个不同应用的数据在同一根网线里是如何传输的呢?根据七层互联网模型,这个功能由运输层(TCP是运输层主要协议)实现.怎么实现呢,在网络 ...
- NEC 框架规范 css function
/* function */.f-cb:after,.f-cbli li:after{display:block;clear:both;visibility:hidden;height:0;overf ...
