-
实现下载操作
-
服务端
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()