愚公移山日记·24

愚公移山日记·24

学习进程

昨天下载了一个新的敲代码的软件Pychram,Pychram的功能很强大,功能多,能力强,也就意味着要多花些时间去熟悉软件,适应新软件的环境,但是昨天我在看一些对Pychram使用的教学视频,很多博主都说了意思差不多的一句话,就是学习这pychram并不是非得把软件弄的门清,把最主要的内容搞懂就可以了,类似我们所使用的office,功能巨多,但是我们常用的功能也就占到所有功能的百分之二十。所以当遇到问题之后,百度一下,就可以非常快的解决问题,我把几个非常常用的快捷键展示一下。
Pychram快捷键
下面我将前天敲的代码进行封装,更加真实的去做一个框架。

import socket
from application import app


class WebServer(object):
    """"WenServer-web服务器"""

    # 定义初始化方法
    def __init__(self):
        # 创建套接字
        tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 设置套接字属性
        tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSERADDR, True)
        # 绑定端口
        tcp_server_socket.bind(('', 8080))
        # 开启监,设置套接字由主动设置为被动
        tcp_server_socket.listen(128)
        self.tcp_server_socket = tcp_server_socket

    # 定义启动服务器的方法
    def start(self):
        while True:
            new_client_socket, ip_port = self.tcp_server_socket.accept()
            self.request_handler(new_client_socket, ip_port)

    # 定义响应服务器
    def request_handler(self, new_client_socket, ip_port):
        """接受客户端请求并处理"""
        # 接受客户端请求报文
        request_data = new_client_socket.recv(1024)
        # 判断客户端是否下线
        if not request_data:
            print('客户端[%s]已经下线~' % str(ip_port))
            new_client_socket.close()
            return
        # 调用app模块的application方法处理请求
        request_data = app.application(request_data, ip_port)
        # 发送请求报文
        new_client_socket.send(request_data)
        # 关闭连接
        new_client_socket.close()


def main():
    ws = WebServer()
    ws.start()

app模块的代码

def parse_request(request_data,ip_port):
    # 根据客户端浏览器请求的资源路径,返回请求资源
    # 把请求协议解码得到请求报文的字符串
    request_text = request_data.decode()
    # 得到请求行
    # 查找第一个\r\n出现的位置
    loc = request_text.find('\r\n')
    # 截取字符串从头开始截取到第一个\r\出现的位置
    request_line = request_text[:loc]
    # print(request_line)
    # 把请求行,按照空=空格拆分,得到表格
    request_line_list = request_line.split(' ')
    # print(request_line_list)
    # 得到请求的资源路径
    filte_path = request_line_list[1]
    print('[%s]正在请求:%s' % (str(ip_port), filte_path))
    # 设置默认首页
    if filte_path == '/':
        filte_path = ''
    return filte_path


def application(request_data, ip_port):
    file_path = parse_request(request_data,ip_port)
    resource_path = current_dir + file_path
    # 拼接响应的报文
    # 相应行
    response_line = 'HTTP/1.1 200 ok\r\n'
    # 响应头
    response_header = 'Server:Python20WS/2.1\r\n'
    # 响应空行
    response_blank = '\r\n'
    # 响应主体
    try:
        with open(resource_path, 'rb') as file:
            response_body = file.read()
    except Exception as e:
        response_line = 'HTTP/1.1 404 NOT Found\r\n'
        response_body = 'Error (%s)' % str(e)
        response_body = response_body.encode()
        response_data = (response_line + response_header + response_blank + response_body)
        return response_data
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值