4.21

目录

作业

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

#客户端
import socketserver
import os
import json
import struct
class MyRequesthandle(socketserver.BaseRequestHandler):
    def handle(self):
        while True:
            try:
                size = 0
                file_msg = ''
                msg = self.request.recv(1024)
                if len(msg) == 0: break

                msg_list = msg.decode('utf-8').split()
                cmd = msg_list[0]
                file_1 = msg_list[1]
                file_2 = msg_list[2]
                file = f'{file_1} {file_2}'
                if os.path.exists(file):
                    if cmd == 'get':
                        with open(file, 'rb')as f:
                            for line in f:
                                size += len(line)
                                file_msg += str(line)
                    else:
                        file_msg = '输错了'
                        size = len(file_msg)
                else:
                    file_msg = '输错了'
                    size = len(file_msg)
                head_dic = {"filename": file,"total_size": size}
                json_str = json.dumps(head_dic)
                json_str_bytes = json_str.encode('utf-8')

                x = struct.pack('i', len(json_str_bytes))
                self.request.send(x)
                self.request.send(json_str_bytes)
                file_msg = file_msg.encode('utf-8')
                self.request.send(file_msg)
            except Exception:break
        self.request.close()

s=socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyRequesthandle)
s.serve_forever()

# 服务端
import subprocess,os,struct,json
from socket import *

server=socket(AF_INET,SOCK_STREAM)
server.bind(('127.0.0.1',8080))
server.listen(4)

while True:
    conn,client_addr=server.accept()
    while True:
        try:
            size = 0
            file_msg = ""
            msg=conn.recv(1024)
            if len(msg) == 0:
                break

            msg_list=msg.decode('utf-8').split()
            cmd=msg_list[0]
            file_1=msg_list[1]
            file_2=msg_list[2]
            file=f'{file_1} {file_2}'
            if os.path.exists(file):
                if cmd =='get':
                    with open(file, 'rb')as f:
                        for line in f:
                            size+=len(line)
                            file_msg+=str(line)
                else:
                    file_msg = ''
                    size = len(file_msg)
            else:
                file_msg='输错了'
                size=len(file_msg)

            head_dic={"filename":file,"total_size":size,}

            json_str = json.dumps(head_dic)
            json_str_bytes = json_str.encode('utf-8')
            x=struct.pack('i',len(json_str_bytes))
            conn.send(x)
            conn.send(json_str_bytes)
            file_msg=file_msg.encode('utf-8')
            conn.send(file_msg)
        except Exception:break
    conn.close()
posted @ 2020-04-21 22:43  祥SHAO  阅读(138)  评论(0)    收藏  举报