python3编写简单静态页面服务器(源码在最后)

1.用到的python模块

        socket(网络通信), multiprocessing(多进程), re(正则表达式)

2.使用工具 pycharm, 项目结构如下图

3. 服务器端的 静态资源index.html 如下所示:

4.执行staticFile_server.py ,然后在浏览器访问 服务器绑定的ip和端口 (localhost, 8090), 结果如图:

5. 源码送上:

import socket
from multiprocessing import Process
import re

#静态资源根目录
HTML_ROOT_DIR = "./staticFiles"

#处理用户请求的函数
def del_request(client_socket):
    """处理用户请求的函数"""
    request_data = client_socket.recv(1024)
    # print(request_data.decode("utf-8"))

    # 从request_data中提取用户请求的 静态资源
    request_lines = request_data.decode("utf-8").splitlines()
    # for request_line in request_lines:
    #     print(request_line)
    request_pageUrl = re.match(r"\w+ +(/[^ ]*) ", request_lines[0]).group(1)
    print(request_pageUrl)

    #读取请求静态资源的
    file = open(HTML_ROOT_DIR + request_pageUrl, "rb");
    #此处应该判断后缀名 img 或者 mv ?
    request_file_data = file.read().decode("utf-8")
    print(request_file_data)

    # 编写服务器对浏览器的响应信息
    # 1.响应起始行
    response_start_line = "HTTP/1.1 200 OK\r\n"
    # 2.响应头
    response_headers = "server: myserver\r\n"
    # 3.响应体
    response_body = request_file_data
    response = response_start_line + response_headers + "\r\n" + response_body

    # print(response)

    #发送响应信心,并关闭client_socket 等待下次请求再次开启
    client_socket.send(bytes(response, "utf-8"))
    client_socket.close()

# main 函数
if __name__ == "__main__":
    #创建服务器
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #服务器需绑定ip(本机则可以为"")和端口号
    server_bind_detail = ("", 8090)
    server_socket.bind(server_bind_detail)
    #链接最大数
    server_socket.listen(88);

    while(True):
        try:
            client_socket,addr_client_socket = server_socket.accept()
            p = Process(target=del_request, args=(client_socket,))
            print("[%s,%s] 已链接服务器!"%addr_client_socket)
            p.start()
            #因为client_socket已经放入到del_request里面,所以这里可以关闭了
            client_socket.close()
        except:
            server_socket.close()
            print("服务器异常关闭!")
            break

7. 如果问题,敬请留言!

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值