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页面的特定设备和计算机.我们在网络上获取的所以资源,都需要有服务器来 ...
随机推荐
- Python爬虫利器之Beautiful Soup,Requests,正则的用法(转)
https://cuiqingcai.com/1319.html https://cuiqingcai.com/2556.html https://cuiqingcai.com/977.html
- 命令式编程 vs 声明式编程
实际上我们绝大多数程序员都是在用命令式风格在编程, 这是和我们的冯诺依曼计算机机构密切相关的. (码农翻身注: 参见文章<冯诺依曼计算机的诞生>) 在一个冯诺依曼计算机中, 最核心的就是C ...
- 【洛谷5287】[HNOI2019] JOJO(主席树优化KMP)
点此看题面 大致题意: 每次往一个字符串末尾加上\(x\)个字符\(c\),或者回到某一历史版本,求\(KMP\)的\(\sum Next_i\). 问题转化 考虑到可以离线. 于是,我们就可以用一个 ...
- 【洛谷P1774】最接近神的人
最接近神的人_NOI导刊2010提高(02) 用类似于桶的方法,树状数组记录原序列的某位置之前已经插入了多少个数, 插入时树状数组单点加1即可 先排一遍序,从大到小插入所有数在原序列的位置, 统计每次 ...
- 【luogu P1514 引水入城】 题解
题目链接:https://www.luogu.org/problemnew/show/P1514 // luogu-judger-enable-o2 #include <iostream> ...
- JDBC执行存储过程的四种情况 (转)
本文主要是总结 如何实现 JDBC调用Oracle的存储过程,从以下情况分别介绍: [1].只有输入IN参数,没有输出OUT参数 [2].既有输入IN参数,也有输出OUT参数,输出是简单值(非列表) ...
- linux c做服务端使用多线程接收图片并且将图片写入数据库
#include<sys/socket.h> #include<sys/types.h> #include<sys/stat.h>//包含文件的全部结构,属性 #i ...
- Linux进程间通信---管道和有名管道
一.管道 管道:管道是一种半双工的通信方式,数据只能单方向流动,而且只能在具有亲缘关系的进程间使用,因为管道 传递数据的单向性,管道又称为半双工管道.进程的亲缘关系通常是指父子进程关系. 管道的特点决 ...
- ABAP术语-Connection Type
Connection Type 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/17/1042479.html A connection ty ...
- Vmware+CentOs7+共享目录
首先下载VMware和CentOs7的镜像 安装VMware我是参考的https://www.cnblogs.com/wuyx/p/7246675.html,已经非常详细了 然后需要配置网络了 参考 ...
