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服务器:固定返回值的更多相关文章

  1. Web Api 接口返回值不困惑:返回值类型详解

    前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 WebApi 接口参数:传参详解,这篇博文内容本身很基础 ...

  2. 前端学HTTP之WEB服务器

    前面的话 Web服务器每天会分发出数以亿计的Web页面,它是万维网的骨干.本文主要介绍WEB服务器的相关内容 总括 Web服务器会对HTTP请求进行处理并提供响应.术语“Web服务器”可以用来表示We ...

  3. JAVA编写WEB服务器

    一.超文本传输协议  1.1 HTTP请求  1.2 HTTP应答  二.Socket类  三.ServerSocket类  四.Web服务器实例  4.1 HttpServer类  4.2 Requ ...

  4. 用java写一个web服务器

    一.超文本传输协议 Web服务器和浏览器通过HTTP协议在Internet上发送和接收消息.HTTP协议是一种请求-应答式的协议——客户端发送一个请求,服务器返回该请求的应答.HTTP协议使用可靠的T ...

  5. 实战WEB 服务器(JAVA编写WEB服务器)

    实战WEB 服务器(JAVA编写WEB服务器) 标签: web服务服务器javawebsockethttp服务器 2010-04-21 17:09 11631人阅读 评论(24) 收藏 举报  分类: ...

  6. HTTP之Web服务器是如何进行工作的!

    Web服务器是如何进行工作的 ====================文章摘自<HTTP权威指南>====================== 1.  建立连接—接收一个客户端的连接,或者 ...

  7. 1.2Web API 2中的Action返回值

    本主题描述 ASP.NET Web API 将返回值转换从一个控制器动作到 HTTP 响应消息. 一个 Web API 控制器动作可以返回下列任一操作 ︰ 1.void 2.IHttpActionRe ...

  8. linux下通过curl访问web服务器

    在通过xshell或者其他远程连接工具连接linux服务器,没安装浏览器,却要测试web服务的请求: 可以使用curl 访问web服务器 例如返回百度的主页内容 #curl www.baidu.com ...

  9. 第五章、web服务器

    一.web服务器 Web服务器就是整个万维网的骨干,广义上来说Web服务器既可以用来表示Web服务器的软件,也可以用来表示提供Web页面的特定设备和计算机.我们在网络上获取的所以资源,都需要有服务器来 ...

随机推荐

  1. python入门16 递归函数 高阶函数

    递归函数:函数内部调用自身.(要注意跳出条件,否则会死循环) 高阶函数:函数的参数包含函数 递归函数 #coding:utf-8 #/usr/bin/python """ ...

  2. python入门10 循环语句

    两种循环: 1 for in 2 while #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 循环语句 ...

  3. Shell脚本学习之expect命令

     转载:http://blog.csdn.net/leexide/article/details/17485451 目录(?)[-] 一概述 二expect的安装 一Tcl 安装 二expect 安装 ...

  4. springboot(服务端接口)获取URL请求参数的几种方法

    原文地址:http://www.cnblogs.com/xiaoxi/p/5695783.html 一.下面为7种服务端获取前端传过来的参数的方法  常用的方法为:@RequestParam和@Req ...

  5. idea 使用maven构建项目时,target bytecode version经常自动变化

    解决方法:在工程的pom.xml中添加 <build> <plugins> <plugin> <groupId>org.apache.maven.plu ...

  6. Northwind数据库不能在SQL Server 2012上创建

    附加mdf文件不出意料会提示数据库格式无法兼容,试着通过脚本来创建,会有以下错误提示: Could not find stored procedure 'sp_dboption'. 原因是SQL Se ...

  7. 实现新layer的时候易犯的错误

    实现新layer后,如果我还是在原来的build文件夹里面make,好像是不会编译新的层的,所以跑程序会报没有你新添加的这个层.要么make clear重新make,要么就直接./build.sh,这 ...

  8. 【题解】洛谷P1445 [Violet]樱花 (推导+约数和)

    洛谷P1445:https://www.luogu.org/problemnew/show/P1445 推导过程 1/x+1/y=1/n! 设y=n!+k(k∈N∗) 1/x​+1/(n!+k)​=1 ...

  9. ATK系列库介绍

    1.一个完整支持分布式服务框架: 2.代码生成工具,可快速生成基于服务框架的应用: 3.其他支持库 4.完整代码见https://github.com/azthinker 目标:使应用开发,低代码.高 ...

  10. RMAN备份与恢复(三)--备份相关概念

    (1)备份对象 可以使用RMAN进行的备份对象如下: --整个数据库:备份所有的数据文件和控制文件: --数据文件:备份指定的一个或多个数据文件: --表空间:备份指定的一个或多个表空间: --归档重 ...