38---我是作业

  • 实现下载操作

  • 服务端

import socketserver
import json
import struct
class MyRequestHandle(socketserver.BaseRequestHandler):
    def handle(self):
        print(self.client_address)
        while True:
            try:
                cmd = self.request.recv(1024)

                if not cmd:
                    break

                elif cmd == 'get'.encode('utf-8'):

                    with open('test.txt', 'rb') as f:
                        res = f.read()

                    head_dic = {
                        "file_name":"test.txt",
                        "total_size":len(res),
                    }
                    json_str = json.dumps(head_dic)
                    json_str_byte = json_str.encode('utf-8')

                    x = struct.pack('i',len(json_str_byte))
                    self.request.send(x)
                    self.request.send(json_str_byte)
                    self.request.send(res)
                else:
                    print('....')
            except Exception:
                break
        self.request.close()

s = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyRequestHandle)
s.serve_forever()
  • 客户端
import socket
import struct
import json
client = socket.socket(-1,-1)
client.connect(('127.0.0.1',8080))
while True:
    cmd = input('>>').strip()
    if not cmd:
        continue
    if cmd == 'q':
        break
    if cmd == 'get':
        client.send(cmd.encode('utf-8'))

        x = client.recv(4)
        head_len = struct.unpack('i',x)[0]
        json_str_bytes = client.recv(head_len)
        json_str = json_str_bytes.decode('utf-8')
        head_dic = json.loads(json_str)
        print(head_dic)
        total_size = head_dic['total_size']
        recv_size = 0
        while recv_size < total_size:
            rec = client.recv(1024)
            recv_size += len(rec)

            with open('test1.txt','wb') as f:
                f.write(rec)

        else:
            print('下载成功')
    else:
        print('...')
client.close()

猜你喜欢

转载自www.cnblogs.com/Kathrine/p/12748484.html
38