socket 根据文件大小判断接收文件

python学习网 2018-01-01 22:21:02
#server 同时进行了md5加密
 1 import socket
 2 import hashlib
 3 
 4 client = socket.socket()
 5 client.connect(('localhost',9998))
 6 while True:
 7     cmd = input("请输入:").strip()
 8     if len(cmd)==0:continue
 9     if cmd.startswith('get'):
10         client.send(cmd.encode())
11         server_response = client.recv(1024)
12         print("server response:",server_response)
13         client.send(b'ready to recv file')
14         file_total_size = int(server_response.decode())
15         received_size = 0
16         filename = cmd.split()[1]
17         f = open(filename+'new','wb')
18         m = hashlib.md5()
19 
20         while received_size < file_total_size:
21             if file_total_size - received_size >1024:#收不止一次
22                 size = 1024
23             else:#最后一次收了,剩多少收多少,不能多收
24                 size = file_total_size - received_size
25                 print('last receive:',size)
26 
27             data = client.recv(size)
28             received_size += len(data)
29             m.update(data)
30             f.write(data)
31         else:
32             new_file_md5 = m.hexdigest()
33             print('file receive done ',received_size,file_total_size)
34             f.close()
35         server_file_md5 = client.recv(1024)
36         print('server file md5:',server_file_md5)
37         print('client file md5',new_file_md5)
38 
39 client.close()

 





#client
 1 import socket
 2 client = socket.socket()
 3 client.connect(('localhost',9999))
 4 while True:
 5     cmd = input('请输入:').strip()
 6     if len(cmd)==0: continue
 7     client.send(cmd.encode('utf-8'))
 8     cmd_res_size = client.recv(1024)#接受命令的长度
 9     print('命令结果长度为:',cmd_res_size)
10     received_size = 0
11     received_data = b''
12     while received_size < int(cmd_res_size.decode()):
13         data = client.recv(1024)
14         received_size += len(data)#每次开始每次接收到的可能小于1024,所以必须len判断
15         received_data += data
16     else:
17         print('cmd res receive done ...',received_size)
18         print(received_data.decode())
19 client.close()

 

阅读(802) 评论(0)