4.21---C/S架构,下载服务端文件练习

Posted zhubincheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.21---C/S架构,下载服务端文件练习相关的知识,希望对你有一定的参考价值。

编写cs架构的软件,实现客户端可以下载服务端的文件,如图片、视频、文本等

服务端:

import socketserver
import os
import json
import struct

class MyRequestHandle(socketserver.BaseRequestHandler):
    def handle(self):
        # 如果tcp协议,self.request=>conn
        print(self.client_address)
        while True:
            try:
                file_name = self.request.recv(1024)
                # 拼接文件路径
                dir_name = os.path.dirname(__file__)
                file_path = os.path.join(dir_name,file_name)
                # 读取文件,若为空则返回空给客户端
                with open(file_path,mode="rb") as f:
                    res = f.read()
                    total_size = len(res)
                if total_size == 0:
                    res = "None".encode("utf-8")
                    total_size = len(res)
                    file_name = "Error:file has no content!"

                # 1、制作头
                header_dic = {
                    "filename": file_name,
                    "total_size": total_size,
                    "md5": "123123xi12ix12"
                }

                json_str = json.dumps(header_dic)
                json_str_bytes = json_str.encode(utf-8)

                # 2、先把头的长度发过去
                x = struct.pack(i, len(json_str_bytes))
                self.request.send(x)

                # 3、发头信息
                self.request.send(json_str_bytes)
                # 4、再发真实的数据
                self.request.send(res)

            except Exception:
                break
        self.request.close()

#  服务端应该做两件事
# 第一件事:循环地从半连接池中取出链接请求与其建立双向链接,拿到链接对象
s=socketserver.ThreadingTCPServer((0.0.0.0,8888),MyRequestHandle)
s.serve_forever()

客户端:

from socket import *

client=socket(AF_INET,SOCK_STREAM)
client.connect((39.97.179.91,8888))

while True:
    msg=input(请输入需要下载的文件名:).strip()
    if len(msg) == 0:continue
    client.send(msg.encode(utf-8))

    res=client.recv(1024)
    print(res.decode(utf-8))

 

以上是关于4.21---C/S架构,下载服务端文件练习的主要内容,如果未能解决你的问题,请参考以下文章

代码块分享

分布式文件服务器FastDFS之“文件上传后(JAVA),前(AngularJS)端代码"

代码片--练习匿名内部类

python编程练习

C# wpf个人网盘练习项目总结

黑客可以访问/复制/下载部署在Node Js上的JS服务器端代码吗?