简单web静态页面服务器
先看一下文件结构
服务器代码
第一种:Web静态服务器显示固定的页面
服务器代码
#coding:utf-8
# 创建一个Web静态服务器显示固定的页面
# 创建一个tcp的socket
# 使用进程监听端口
import socket
from multiprocessing import Process
def handle_socket(client_socket):
# 接收消息
request = client_socket.recv(1024)
# 打印接收到的请求报头
print(request)
# 拼接响应报头
responseHeaderLines = "HTTP/1.1 200 OK\r\n"
responseHeaderLines += "\r\n"
responseBody = "<h1>hello world</h1>"
response = responseHeaderLines + responseBody
# 发送响应数据
client_socket.send(bytes(response,"utf-8"))
# 关闭socket
client_socket.close()
if __name__ == "__main__":
# 创建一个socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定一个端口号
server_socket.bind(("", 7788))
# 创建监听,设置监听数量
server_socket.listen(12)
while True:
# 接收连接用户
client_socket, client_address = server_socket.accept()
# 创建一个进程,执行请求响应操作
print("[%s,%s]已连接"%client_address)
handle_client = Process(target=handle_socket,args=(client_socket,))
handle_client.start()
# 关闭socket
client_socket.close()
第一种结果:
第二种:Web静态服务器(使用html文件)
页面代码:
<html>
<head>
<meta charset="UTF-8">
<title>这是一个静态服务器</title>
<style type="text/css">
h1,h2{
color: aquamarine;
}
</style>
</head>
<body>
<h1>HELLO WORLD</h1>
<h2>这是一个静态服务器</h2>
</body>
</html>
服务器代码
# coding:utf-8
# 创建一个简单静态web服务器
import socket
from multiprocessing import Process
import re
# 创建原始路径
HTML_ROOT = "./HTML"
def handle_client(client_socket):
# 接收消息
request = client_socket.recv(1024)
# 拆分请求报头
request_path = request.splitlines()[0]
# 使用utf-8解码
httpRequestMethodLine = request_path.decode("utf-8")
# 使用正则匹配分析出请求文件路径
getFileName = re.match(r"[^/]+(/[^ ]*)",httpRequestMethodLine).group(1)
print("==>请求路径:%s"%getFileName)
# 判断请求文件路径是否为默认
if "/" == getFileName:
# 默认访问主页面
getFileName = HTML_ROOT + "/index.html"
else:
getFileName = HTML_ROOT + getFileName
print("==>拼接后路径:%s"%getFileName)
try:
# 解决编码问题加上编码条件
file = open(getFileName,'r', encoding='UTF-8')
except Exception:
# 请求路径出错返回404消息
responseHeaderLines = "HTTP/1.1 404 not found\r\n"
responseHeaderLines += "\r\n"
responseBody = "404 the file is no find"
else:
# 请求路径可用,可以打开文件
# 读取文件
response_data = file.read()
# 关闭文件
file.close()
# 打印读取数据
# print("==>读取到的数据:",response_data)
# 拼接响应报头,将读取到的数据发送
responseHeaderLines = "HTTP/1.1 200 OK\r\n"
responseHeaderLines += "\r\n"
responseBody = response_data
# 拼接响应报头,将读取到的数据发送
response = responseHeaderLines + responseBody
# 发送响应数据
client_socket.send(bytes(response, "utf-8"))
#关闭socket
client_socket.close()
if __name__ == "__main__":
# 创建一个socket
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 设置socket
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定一个端口号
server_socket.bind(("",7788))
# 创建监听
server_socket.listen(12)
while True:
# 创建接收
client_socket,client_address = server_socket.accept()
# 打印链接客户端信息
print("[%s : %s]已连接"%client_address)
# 创建一个进程负责每个链接的客户
handle_socket = Process(target=handle_client,args=(client_socket,))
handle_socket.start()
# 关闭socket
client_socket.close()
第二种运行结果
浏览器:
打印界面: