使用socket创建一个简单的web服务器
程序员文章站
2022-03-15 10:15:51
...
import re
import socket
# 定义一个服务函数为客户端服务
def server(new_socket):
# 接收请求并解码
request = new_socket.recv(1024).decode("utf-8")
# 将请求分割成行
request_lines = request.splitlines()
# 使用正则匹配请求的第一行,内容大概为:GET / HTTP/1.1
result = re.match(r'[^/]+(/[^ ]*)', request_lines[0])
# 如果有匹配到内容,查找并读取对应文件内容
if result:
file_name = result.group(1)
if file_name == "/":
file_name = "/login.html"
try:
f = open(r'D:\testFile\web' + file_name, 'rb')
# 否则发送404页面
except:
response = "HTTP/1.1 404 NOT FOUND\r\n"
response += '\r\n'
response += "--------404-----------"
new_socket.send(response.encode("utf-8"))
# 发送header和body
else:
response_body = f.read()
f.close()
response_header = "HTTP/1.1 200 OK\r\n"
response_header += '\r\n'
# 发送header
new_socket.send(response_header.encode("utf-8"))
# 发送body
new_socket.send(response_body)
# 关闭服务套接字
new_socket.close()
def main():
# 创建套接字
tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定ip和port,双引号内空格为空表示绑定本地ip
tcp_server.bind(("", 58080))
# 监听
tcp_server.listen(128)
# 等待客户端请求
while True:
# 创建服务套接字,为请求客户端服务
new_socket, client_addr = tcp_server.accept()
# 调用服务函数
server(new_socket)
# 关闭套接字
tcp_server.close()
if __name__ == '__main__':
main()
在浏览器输入框中输入绑定的ip和port,如:127.0.0.1:58080,会返回127.0.0.1:58080/login.html页面。
需要在D:\testFile\web中先准备好前端页面文件和图片文件等,如login.html、index.html等等这些。