创建静态web服务器
①:打开终端
②:进到静态服务器文件夹
③:输入命令:python -m http.server 8080
④:在游览器中查看:127.0.0.1:8080
用Python代码实现:
import socket
#1.创建套接字对象
tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#为了让绑定端口在服务断开后可以迅速释放,建议设置端口复用
tcp_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
#2.绑定Ip和端口(注意:参数比较特殊,要求是一个元组)
#绑定的ip地址可以不写,代表本机ip地址
tcp_server.bind(('',8080))
#3.开始监听
tcp_server.listen(128)#listen()的参数代表最多处理128个客户端
while True:
#4.准备接受客户端连接请求,产生新的套接字对象
conn_socket,ip_port=tcp_server.accept()#tcp_server.accept()返回元组,一个是新的套接字对象,和客户端信息
#5、接受客户端信息发送过来的HTTP请求
recv_client_data=conn_socket.recv(4096)
#6.解析数据:
if len(recv_client_data)>0:
recv_client_connt=recv_client_data.decode('utf-8')
print(recv_client_connt)
#7.返回HTTP响应给客户端游览器(1-响应行 2-响应头 3-空行 4-响应体)
#① 打开static目录下的index.html文件
with open('static/index.html','rb') as f:
file_data=f.read()
#② 响应行
response_line='HTTP/1.1 200 ok\r\n'
#③ 响应头
response_header='Server:PWB1.0\r\n'
#④ 响应体
response_body=file_data
#⑤ 响应数据
response_data=(response_line+response_header+'\r\n').encode('utf-8')+file_data
#发送数据
conn_socket.send(response_data)
conn_socket.close()
创建web服务器返回指定页面:
# 开发人:龙技术
# 个人训练
# 开发时间:2021/8/13 16:16
import socket
#1.创建套接字对象
tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#为了让绑定端口在服务断开后可以迅速释放,建议设置端口复用
tcp_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
#2.绑定Ip和端口(注意:参数比较特殊,要求是一个元组)
#绑定的ip地址可以不写,代表本机ip地址
tcp_server.bind(('192.168.15.28',8080))
#3.开始监听
tcp_server.listen(128)#listen()的参数代表最多处理128个客户端
while True:
#4.准备接受客户端连接请求,产生新的套接字对象
conn_socket,ip_port=tcp_server.accept()#tcp_server.accept()返回元组,一个是新的套接字对象,和客户端信息
#5、接受客户端信息发送过来的HTTP请求
recv_client_data=conn_socket.recv(4096)
#6.解析数据:
if len(recv_client_data)>0:
recv_client_connt=recv_client_data.decode('utf-8')
print(recv_client_connt)
response_lj=recv_client_connt.split(' ',maxsplit=2)[1]
print(response_lj)
if response_lj=='/':
lj='static/index.html'
else:
lj='static'+response_lj
#7.返回HTTP响应给客户端游览器(1-响应行 2-响应头 3-空行 4-响应体)
#① 打开static目录下的index.html文件
try:
with open(lj,'rb') as f:
file_data=f.read()
except Exception as e:
with open('static/error.html','rb') as f:
file_data=f.read()
#如果文件不存在,则返回HTTP、1.1 404 Not Found
# ② 响应行
response_line = 'HTTP/1.1 404 Not Found\r\n'
# ③ 响应头
response_header = 'Server:PWB1.0\r\n'
# 中文乱码解救方案:
# response_header = 'Server:PWB1.0\r\nContent-type:text/html; charset=utf-8\r\n'
# ④ 响应体
response_body = file_data
# ⑤ 响应数据
response_data = (response_line + response_header + '\r\n').encode('utf-8') + file_data
# 发送数据
conn_socket.send(response_data)
else:
#② 响应行
response_line='HTTP/1.1 200 ok\r\n'
#③ 响应头
response_header='Server:PWB1.0\r\n'
#中文乱码解救方案:
#response_header = 'Server:PWB1.0\r\nContent-type:text/html; charset=utf-8\r\n'
#④ 响应体
response_body=file_data
#⑤ 响应数据
response_data=(response_line+response_header+'\r\n').encode('utf-8')+file_data
#发送数据
conn_socket.send(response_data)
finally:
conn_socket.close()
创建web服务器多任务:
# 开发人:龙技术
# 个人训练
# 开发时间:2021/8/13 17:04
import socket
import threading
def handle_client_requset(conn_socket):
# 5、接受客户端信息发送过来的HTTP请求
recv_client_data = conn_socket.recv(4096)
# 6.解析数据:
if len(recv_client_data) > 0:
recv_client_connt = recv_client_data.decode('utf-8')
print(recv_client_connt)
response_lj = recv_client_connt.split(' ', maxsplit=2)[1]
if response_lj == '/':
lj = 'static/index.html'
else:
lj = 'static' + response_lj
# 7.返回HTTP响应给客户端游览器(1-响应行 2-响应头 3-空行 4-响应体)
# ① 打开static目录下的index.html文件
try:
with open(lj, 'rb') as f:
file_data = f.read()
except Exception as e:
with open('static/error.html', 'rb') as f:
file_data = f.read()
# 如果文件不存在,则返回HTTP、1.1 404 Not Found
# ② 响应行
response_line = 'HTTP/1.1 404 Not Found\r\n'
# ③ 响应头
response_header = 'Server:PWB1.0\r\n'
# 中文乱码解救方案:
# response_header = 'Server:PWB1.0\r\nContent-type:text/html; charset=utf-8\r\n'
# ④ 响应体
response_body = file_data
# ⑤ 响应数据
response_data = (response_line + response_header + '\r\n').encode('utf-8') + file_data
# 发送数据
conn_socket.send(response_data)
else:
# ② 响应行
response_line = 'HTTP/1.1 200 ok\r\n'
# ③ 响应头
response_header = 'Server:PWB1.0\r\n'
# 中文乱码解救方案:
# response_header = 'Server:PWB1.0\r\nContent-type:text/html; charset=utf-8\r\n'
# ④ 响应体
response_body = file_data
# ⑤ 响应数据
response_data = (response_line + response_header + '\r\n').encode('utf-8') + file_data
# 发送数据
conn_socket.send(response_data)
finally:
conn_socket.close()
#1.创建套接字对象
tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#为了让绑定端口在服务断开后可以迅速释放,建议设置端口复用
tcp_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
#2.绑定Ip和端口(注意:参数比较特殊,要求是一个元组)
#绑定的ip地址可以不写,代表本机ip地址
tcp_server.bind(('192.168.15.28',8080))
#3.开始监听
tcp_server.listen(128)#listen()的参数代表最多处理128个客户端
while True:
#4.准备接受客户端连接请求,产生新的套接字对象
conn_socket,ip_port=tcp_server.accept()#tcp_server.accept()返回元组,一个是新的套接字对象,和客户端信息
tcp=threading.Thread(target=handle_client_requset,args=(conn_socket,))
tcp.start()
静态web服务器创建面对对象:
# 开发人:龙技术
# 个人训练
# 开发时间:2021/8/13 18:08
import socket
import threading
class web():
def __init__(self):
tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_server.bind(('192.168.15.28',8080))
tcp_server.listen(128)
self.tcp_server=tcp_server
@staticmethod
def handle_client_requset(conn_socket):
recv_client_data = conn_socket.recv(4096)
# 6.解析数据:
if len(recv_client_data) > 0:
recv_client_connt = recv_client_data.decode('utf-8')
print(recv_client_connt)
response_lj = recv_client_connt.split(' ', maxsplit=2)[1]
if response_lj == '/':
lj = 'static/index.html'
else:
lj = 'static' + response_lj
# 7.返回HTTP响应给客户端游览器(1-响应行 2-响应头 3-空行 4-响应体)
# ① 打开static目录下的index.html文件
try:
with open(lj, 'rb') as f:
file_data = f.read()
except Exception as e:
with open('static/error.html', 'rb') as f:
file_data = f.read()
# 如果文件不存在,则返回HTTP、1.1 404 Not Found
# ② 响应行
response_line = 'HTTP/1.1 404 Not Found\r\n'
# ③ 响应头
response_header = 'Server:PWB1.0\r\n'
# 中文乱码解救方案:
# response_header = 'Server:PWB1.0\r\nContent-type:text/html; charset=utf-8\r\n'
# ④ 响应体
response_body = file_data
# ⑤ 响应数据
response_data = (response_line + response_header + '\r\n').encode('utf-8') + file_data
# 发送数据
conn_socket.send(response_data)
else:
# ② 响应行
response_line = 'HTTP/1.1 200 ok\r\n'
# ③ 响应头
response_header = 'Server:PWB1.0\r\n'
# 中文乱码解救方案:
# response_header = 'Server:PWB1.0\r\nContent-type:text/html; charset=utf-8\r\n'
# ④ 响应体
response_body = file_data
# ⑤ 响应数据
response_data = (response_line + response_header + '\r\n').encode('utf-8') + file_data
# 发送数据
conn_socket.send(response_data)
finally:
conn_socket.close()
def start(self):
while True:
connt_socket,ip=self.tcp_server.accept()
tcp=threading.Thread(target=self.handle_client_requset,args=(connt_socket,))
tcp.start()
if __name__ == '__main__':
w=web()
w.start()