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. 如何处理错误信息 Pricing procedure could not be determined

    当给一个SAP CRM Quotation文档的行项目维护一个产品时,遇到如下错误信息:Pricing procedure could not be determined 通过调试得知错误消息在fun ...

  2. LA 2038 最少点覆盖

    题目链接:https://vjudge.net/problem/UVALive-2038 题意:我看了原题,lrj的书上题意写错了,应该是最少点覆盖,当然可以用最大匹配去做,由于是树形的: 可以树形D ...

  3. Velocity 模板

    Velocity 模板引擎介绍 引:https://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ 在 现今的软件开发过程中,软件开发人员将更多的 ...

  4. [POI2008]STA-Station

    嘟嘟嘟 一道树形dp题. 令dp[u]表示以u为根时所有点的深度之和.考虑u到他的一个子节点v时答案的变化,v子树以外的点的深度都加1,v子树以内的点的深度都减1,所以dp[v] = dp[u] + ...

  5. VOJ1049 送给圣诞夜的礼品 【矩阵经典4】

    任意门:https://vijos.org/p/1049 描述 当小精灵们把贺卡都书写好了之后.礼品准备部的小精灵们已经把所有的礼品都制作好了.可是由于精神消耗的缘故,他们所做的礼品的质量越来越小,也 ...

  6. 2018.10.3 MianShiBaoDian JavaWeb后端部分

    MSBD 四.JavaWeb后端部分 1.Tomcat的优化经验 去掉对web.xml的监控,吧jsp提前编写成servlet,由于物理内存的情况,加大Tomcat使用的jvm的内存 2.HTTP请求 ...

  7. lucene&solr学习——创建和查询索引(代码篇)

    1. Lucene的下载 Lucene是开发全文检索功能的工具包,从官网下载Lucene4.10.3并解压. 官网:http://lucene.apache.org/ 版本:lucene7.7.0 ( ...

  8. 移动端判断微信浏览器安卓浏览器和ios浏览器

    $(function(){ var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf ...

  9. 为什么有IP还需要硬件地址,或者说为什么有硬件地址还需要IP

    只用MAC 虽然每个设备都有唯一的硬件地址,但不都是MAC格式. 只用MAC的话理论上是可行的,但是其中 兼容不同的硬件地址,处理起来是非常困难的.而且数据链路层也没有必要处理网络层的逻辑. 只用IP ...

  10. Oracle listener.log 清理

    在oracle中,如果不对监听日志文件进行截断(定期清理),那么监听日志文件会变得越来越大,由于一些老旧的OS不支持2GB以上的文件,故当listener.log文件超过2GB时,会出现无法处理新的连 ...