猫史档案馆


【Python作品分享】客户端访问【作品秀】

用户:只是一只杯子只是一只杯子查看:0 回复:1 评论:0 创建时间:2020-06-21T08:48:59


【作品展示】

center_image

 

【作品介绍】

大家好,我只做了一个客户端访问的文件,目前因为没有前端所以才报错,希望能集齐50个赞,杯子的服务器正在搭建,希望大家能够买一下本源码

 

【作品源代码】

# coding:utf-8

import socket  # 导入Socket模块
import re       # 导入re正则模块
from multiprocessing import Process  # 导入Process多线程模块

H喵L_ROOT_DIR = "./Views"   # 设置静态文件根目录


class HTTPServer(object):
    def __init__(self):
        """初始化方法"""
        self.server_socket = socket.socket(
            socket.AF_INET, socket.SOCK_STREAM)  # 创建Socket对象

    def start(self):
        """开始方法"""
        self.server_socket.listen(128)  # 设置最多连接数
        print('服务器等待客户端连接...')
        # 执行喵循环
        while True:
            client_socket, client_address = self.server_socket.accept()  # 建立客户端连接
            print("[%s, %s]用户连接上了" % client_address)
            handle_client_process = Process(
                target=self.handle_client, args=(client_socket,))  # 实例化线程类
            handle_client_process.start()  # 开启线程
            client_socket.close()           # 关闭客户端Socket

    def handle_client(self, client_socket):
        """处理客户端请求"""
        # 获取客户端请求数据
        request_data = client_socket.recv(1024)  # 获取客户端请求数据
        print("request data:", request_data)
        request_lines = request_data.splitlines()  # 按照行('\r', '\r\n', \n')分隔
        # 输出每行新型
        for line in request_lines:
            print(line)
        request_start_line = request_lines[0]  # 解析请求报文
        print("*" * 10)
        print(request_start_line.decode("utf-8"))
        # 使用正则表达式,提取用户请求的文件名
        file_name = re.match(
            r"\w+ +(/[^ ]*) ", request_start_line.decode("utf-8")).group(1)
        # 如果文件名是根目录,设置文件名为file_name
        if "/" == file_name:
            file_name = "/index.html"
        # 打开文件,读取内容
        try:
            file = open(H喵L_ROOT_DIR + file_name, "rb")
        except IOError:
            # 如果异常,返回404
            response_start_line = "HTTP/1.1 404 Not Found\r\n"
            response_headers = "Server: My server\r\n"
            response_body = "The file is not found!"
        else:
            # 读取文件内容
            file_data = file.read()
            file.close()
            # 构造响应数据
            response_start_line = "HTTP/1.1 200 OK\r\n"
            response_headers = "Server: My server\r\n"
            response_body = file_data.decode("utf-8")

        response = response_start_line + response_headers + \
            "\r\n" + response_body  # 拼接返回数据
        print("response data:", response)
        client_socket.send(bytes(response, "utf-8"))  # 向客户端返回响应数据
        client_socket.close()   # 关闭客户端连接

    def bind(self, port):
        """绑定端口"""
        self.server_socket.bind(("", port))


def main():
    """主函数"""
    http_server = HTTPServer()  # 实例化HTTPServer()类
    http_server.bind(8000)      # 绑定端口
    http_server.start()         # 调用start()方法


if __name__ == "__main__":
    main()                    # 执行main()函数

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
lsk666666lsk666666

这个代码为什么我好像在哪里看到过?

点赞0


评论