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. C/C++ 修改控制台程序文字颜色

    可以修改前景色(字体颜色)和背景色. 示例代码如下: #include <iostream> #include <Windows.h> //需要引用Windows.h usin ...

  2. 每天一个linux命令:df 命令

    linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...

  3. Android开发经验01:31个Android开发实战经验

    1. 在Android library中不能使用switch-case语句访问资源ID:在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案 2. 不能 ...

  4. Android(java)学习笔记56:Android InputMethodManager输入法简介

    参见博客: http://blog.csdn.net/pi9nc/article/details/9196779

  5. Shell脚本学习之expect命令

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

  6. 【洛谷5294】[HNOI2019] 序列(主席树维护单调栈+二分)

    点此看题面 大致题意: 给你一个长度为\(n\)的序列\(A\),每次询问修改一个元素(只对当前询问有效),然后让你找到一个不下降序列\(B\),使得这两个序列相应位置之差的平方和最小,并输出这个最小 ...

  7. About me and this site(2018/8/28)

    Name: 李秋豪 / [lǐ qiū háo] I'm a junior majoring in InfoSec at Harbin Institute of Technology. I'm int ...

  8. fast、faster中ap值的计算

    def voc_ap(rec, prec, use_07_metric=False): """ ap = voc_ap(rec, prec, [use_07_metric ...

  9. [luoguP3325][HNOI2012]矿场搭建

    P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...

  10. Page 由于代码已经过优化或者本机框架位于调用堆栈之上

    Page.Response.Clear();            Page.Response.Write("<script type=\"text/javascript\& ...